2016-07-12 40 views
0

我正在使用Solr並希望瞭解EdgeNGramFilterFactory的工作原理。Solr nGram過濾器minGramSize - 僅包含2個字符的單詞令牌

例如,我在尋找一個術語「1個TB」。請注意,我沒有幾個產品具有我正在搜索的字段的屬性。

這裏是指數時間應用於該字段類型的過濾器。

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" /> 

現在,當我搜索術語「1 tb」時,我沒有得到期望的結果。

我有幾個產品,術語「500萬像素」,當我搜索「5兆」,它給我的結果。後來我發現它不適用於「5我」。並沒有給出結果。

如果我刪除NGRAM過濾器,它工作正常。而且,如果我們設置minGramSize =「1」,那麼查詢「1 tb」就可以正常工作。

我是假設,對於長期TB,令牌TB應該是有效的。但是,當我應用minGramSize爲2時,它似乎不會創建!

有人可以解釋爲什麼嗎?

這裏是在架構中定義的字段。

<fieldType name="AttributesField" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="10" /> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <charFilter class="solr.MappingCharFilterFactory" mapping="mapping-ISOLatin1Accent.txt"/> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 
+0

你分析Solr管理頁面上的一樣嗎?該字段使用的確切字段類型是什麼? –

+0

我創建了文本字段類型來應用單獨的過濾器和標記需要。 – Krunal

+0

你能描述一下嗎?它有什麼? –

回答

0

你可以嘗試用下面的字段類型

<fieldType name="AttributesField" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="10" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

PorterStemFilterFactory:它確實歸一化處理,可以消除的話普通的結局。

Example: "riding", "rides", "horses" ==> "ride", "ride", "hors". 

<filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front"/> 

與下面的字符串值Nigerian配置被分解爲以下條款

Nigerian => "ni", "nig", "nige", "niger", "nigeri", "nigeria", "nigeria", "nigerian" 
+0

我試過這個,得到了同樣的結果。我如何檢查什麼是令牌? – Krunal

+0

查看solr分析頁面上的相同內容。它將顯示索引時創建的標記和查詢時發送的標記 –

+0

http:// hostname:8983/solr/.......... ... https://cwiki.apache.org/confluence/display/solr/Query+Screen –