2012-08-07 58 views
3

我想在Solr中使用NGramFilterFactory(在Rails中使用太陽黑子)來查找相似的標題。我設法一個新字段添加到我的Solr schema.xml中像如下:使用Solr的NGramFilterFactory進行相似性搜索

<fieldType name="text_ngrm" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.NGramFilterFactory" minGramSize="2" maxGramSize="4"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 

由於我在Rails應用程序中使用sunpsot,因此通過動態領域增加了新的領域,以黑子。這一切工作,我現在可以使用NGramFilterFactory搜索我的模型。我不確定的是,如何配置solr以搜索相似的標題。這裏是我的具體問題:

  1. 當我試圖查詢類似的標題時使用dismax查詢分析器是否有意義?
  2. (Minimum 'Should' Match)參數如何幫助我找到類似的標題?
  3. 根據什麼我會選擇ngram min。和最大。大小?

感謝您的任何反饋。

回答

0

有幾件事情你可以做:

  1. dismax沒有模糊搜索。因此,如果您想在用戶搜索「家庭」或「終端」時返回「福爾摩斯」,最好是將其更改爲解析器。
  2. 最低'應該'匹配可以幫助您定義您的搜索結果將如何靈活處理匹配的單詞數量。 讓我們假設用戶尋找'蝙蝠俠暗夜',並且您有'蝙蝠俠暗夜'''和'蝙蝠俠歸來'記錄標記。如果mm是2,則僅返回'蝙蝠俠暗夜',因爲它匹配最少數量的單詞'蝙蝠俠'和'夜'。另一方面,'蝙蝠俠歸來'只匹配其中一個,所以它不會被退回。
  3. NGramFilterFactory主要用於自動完成。我認爲PorterStemFilterFactory更符合您的需求。你可以在這裏找到一些信息http://wiki.apache.org/solr/LanguageAnalysis#Notes_about_solr.PorterStemFilterFactory