2011-03-12 51 views
6

我加入solr索引:「美國人」。當我搜索「美國」時,沒有結果。如何在Solr中配置詞幹?

schema.xml應該如何配置才能獲得結果?

當前配置:

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
      <analyzer type="index"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
      <analyzer type="query"> 
       <tokenizer class="solr.WhitespaceTokenizerFactory" /> 
       <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" /> 
       <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" /> 
       <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" /> 
       <filter class="solr.LowerCaseFilterFactory" /> 
       <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt" /> 
       <filter class="solr.RemoveDuplicatesTokenFilterFactory" /> 
       <filter class="solr.PorterStemFilterFactory"/> 
      </analyzer> 
     </fieldType> 

回答

4

爲什麼你有兩個詞幹?
嘗試從兩種分析器類型中刪除EnglishPorterFilterFactory(已棄用),重建索引,然後嘗試搜索美國將產生美國

如果不行,您可以嘗試的另一件事是刪除您的兩個stemmer過濾器,並用language="English"代替SnowballPorterFilterFactory

+0

試過兩種方法。一樣。 – user657009 2011-03-12 22:51:34

+0

index:「老虎機」 \t當我通過「老虎機」,「老虎機」,「老虎機」搜索時,有結果。 index:「American」 \t沒有結果:「American」。 – user657009 2011-03-12 22:55:32

+3

您應該做的第一件事是打開您的Solr管理員web應用程序,轉到分析並選擇您的字段類型/名稱(同時選中詳細輸出字段),在索引字段中鍵入American,在查詢字段中鍵入America。這將允許您查看它的分析方式,通過過濾器進行過濾。如果您還沒有下載[它是可執行的jar],請下載[Luke](http://www.getopt.org/luke/luke-0.9.9/lukeall-0.9.9.jar)以獲得更詳細的分析。啓動它並加載Lucene索引。用它來找出你的內容到底有多精確,以及其他許多有用的信息...... – 2011-03-12 23:06:57

0

對於analyzer,您必須使用一個詞幹,而EnglishPorterFilterFactory已被棄用,因爲@Marko已經提及。所以你應該從分析儀中刪除這個。

我用SnowballPorterFilterFactory兩個索引和查詢分析器 -

<fieldType name="text_stem"> 
    <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SnowballPorterFilterFactory"/> 
     <!-- other filters --> 
    </analyzer> 
</fieldType> 

的字段類型定義是不言自明,但以防萬一:

  • 標記者solr.WhitespaceTokenizerFactory:此操作將使用空格作爲分隔符將句子分解成單詞。

  • Filter solr.SnowballPorterFilterFactory:該過濾器將對每個單詞(標記)應用詞幹分析算法。在上面的例子中,我選擇了Snowball Porter stemming算法。 Solr提供了一些常用干擾算法的實現。

你可以瀏覽其他一些干擾算法,例如, HunspellStemFilterFactory,KStemFilterFactory