2011-03-12 87 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