在小平面搜索结果中出现的Solr停止词很少

时间:2015-07-07 03:53:13

标签: solr lucene

问题:在分面搜索结果中显示少量Solr停用词。

当前实施: 我在stopwords.txt文件中至少有30到40个停用词。 Solr facet搜索与停用词完美匹配,如:

  

表示,是,和,作为

但很少有像

这样的停用词
  

打电话,陈述,询问

显示在方面搜索结果中。我尝试使用solr分析。 Word出现在ST。

我正在使用以下配置

<field name="message" type="text_en" indexed="true" stored="true" 
multiValued="true"/>

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" 
            words="lang/stopwords_en.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" 
            protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"       
            ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"   
            words="lang/stopwords_en.txt"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" 
            protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
  </analyzer>
</fieldType>

1 个答案:

答案 0 :(得分:0)

尝试更改过滤器的顺序。将StopFilterFactory放在链中的最后。这应该可以防止停用词被索引。

<field name="message" type="text_en" indexed="true" stored="true" 
multiValued="true"/>

<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" 
            protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" 
            words="lang/stopwords_en.txt"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"       
            ignoreCase="true" expand="true"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.EnglishPossessiveFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" 
            protected="protwords.txt"/>
    <filter class="solr.PorterStemFilterFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true"   
            words="lang/stopwords_en.txt"/>
  </analyzer>
</fieldType>

<强>解释

先前的标记器/过滤器的输出作为输入提供给下一个标记器/过滤器。

来自Solr Reference Guide

  

过滤器检查令牌流并保留,转换或丢弃   他们,或创造新的。 可以组合标记符和过滤器   形成管道或链,其中一个输出输入到   接下来。这样的标记化器和过滤器序列称为   分析仪和分析仪的结果输出用于匹配   查询结果或构建索引。

所以,如果你有一个像&#34;呼叫&#34;它将首先到达fieldType链中的StopFilterFactory

因为&#34;呼叫&#34;在你的stopwords.txt文件中没有单词,它将转到PorterStemFilterFactory,其中&#34;调用&#34;更改为&#34; call&#34;。

检查此website以查看使用PorterStemFilterFactory的根词并对该词进行索引。

这就是您仍然在索引中看到停用词的原因。

根据您使用的Solr版本,您可能会看到一个单词如何&#34;调用&#34;得到索引。

http://YourSolrIPAddress:8983/solr/#/YourCoreORCollection/schema-browser?field=message