如何正确配置solr词干

时间:2014-12-17 00:40:31

标签: solr stemming

我在Solr中配置了一个字段,如下所示。当我搜索“护发素”这个词时,我希望找到包含“调节”的单词。但是基于Solr分析,porterstemfilter在索引时将“调节”一词切换为“Condit”。因此,在搜索时,当我查询“调节器”时,它被称为“条件”,因此不匹配“调节”。

如何配置干扰,以便调节剂和调理都应该干预?

<fieldType name="text_general" class="solr.TextField"
           positionIncrementGap="100" autoGeneratePhraseQueries="true">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter class="solr.WordDelimiterFilterFactory" 
            generateWordParts="1" generateNumberParts="1" 
            catenateWords="1" catenateNumbers="1" catenateAll="0" 
            splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <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"
            splitOnCaseChange="1"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

2 个答案:

答案 0 :(得分:3)

我还建议尝试不同的Stemmer。 Solr中包含4个

  1. solr.PorterStemFilterFactory
  2. solr.SnowballPorterFilterFactory
  3. solr.KStemFilterFactory
  4. solr.HunspellStemFilterFactory(你需要一个来自外部来源的字典,比如开放办公室)
  5. 每个都会针对您的问题产生不同的结果,请参阅下文。鉴于结果并且您不需要外部资源,我也会选择KStem。如果你不想加入字典,我会选择hunspell。

    1. 搬运工
      • 护发素 - &gt;条件
      • 调节 - &gt;康迪特
    2. snowballporter
      • 护发素 - &gt;条件
      • 调节 - &gt;康迪特
    3. kstem
      • 护发素 - &gt;条件
      • 调节 - &gt;条件
    4. hunpell with en_GB
      • 护发素 - &gt;条件
      • 调节 - &gt;空调;条件

答案 1 :(得分:1)

如果只有这个特殊情况很重要,你可以覆盖词干分析器:

StemmerOverrideFilterFactory

如果Porter词干分析器通常过于激进,那么请尝试另一个词干分析器KStem