2012-06-21 96 views
1

我正在使用EdgeNGramFilterFactory實現solr通配符搜索。我試圖執行前/後搜索。例如搜索「格式化系統」和「系統格式」以返回相同結果。我已經配置了前EdgeNGramFilterFactory和背部,但只有前「」格式系統」搜索工作沒有回來‘系統格式’。可你有什麼建議是錯誤的或其他任何東西,我錯過這裏?Solr WildCard EdgeNGramFilterFactory搜索前後搜索

這裏是我的配置

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer> 
       <tokenizer class="solr.StandardTokenizerFactory" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.StopFilterFactory" words="stopwords_en.txt" ignoreCase="true" /> 
       <!-- <filter class="solr.SnowballPorterFilterFactory" language="English" /> --> 
       <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> 
       <filter class="EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="back" /> 
      </analyzer> 
</fieldType> 

回答

2

你提到的例子不適合那麼多,因爲它包含了術語,當你搜索一個術語時,你不需要任何通配符,如果你想搜索一個術語部分,比如sys,例如使NGrams看起來不錯,我建議你看一下你的solr分析頁面,看看你的分析儀鏈的結果。EdgeNGramFilterFactory配置爲side="front",具有文字系統輸入會產生以下條款:

sy sys syst syste system 

這樣你就可以搜索SYS或SYSTE和得到的結果,即使您最初收錄該詞的系統。

EdgeNGramFilterFactory配置爲side="back",具有文字系統輸入會產生以下條款:

em tem stem ystem system 

這樣你就可以搜索TEM或ystem並得到結果。

如果你把它們放在同一條鏈上,你可以使用第二臺分析儀處理第一臺儀器產生的每一項。你基本上把NGrams從每個前面的NGram中撤出,這不是你想要的。

更好地首先澄清您的要求。如果您仍然想要前後生成NGrams,則應在兩個不同的字段中執行此操作,然後可以使用edismax解析器搜索兩者。

+0

好的,我的要求是搜索文本「系統格式」和「格式系統」應該返回相同的結果。有沒有辦法做到這一點? – sea

+0

也有一種方法可以將搜索詞「A/C」視爲AC,反之亦然? – sea

+0

如果你只想搜索完整的單詞,你可以顛倒他們的訂單,那已經可以直接使用,你不需要NGrams。關於第二個問題,請看[Solr Analyzers wiki](http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters) – javanna