考虑在stopwords.txt中包含多个单词的短语

时间:2015-03-04 16:06:35

标签: apache solr filter

我配置了 stopwords.txt ,它运行正常。

问题在于我想搜索一个短语,该短语仅包含在 stopwords.txt 中包含的单词。 Solr没有返回结果。 例如,在 stopwords.txt 中我有这样的话:

other
the
cat

当我搜索: cat 时,Solr省略结果,对于 cat 也是如此。没关系。

但是当我搜索:时,Solr也在做同样的事情,省略了结果,而这正是我想要避免的。我想要返回包含 the cat 的所有内容。

提前致谢

PS:这是我的配置行

<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 

1 个答案:

答案 0 :(得分:1)

StopFilterFactory评估每个标记,并确定该标记是否与其中一个停用词完全匹配。要保留这句话,&#34; cat&#34;在您的搜索中,您需要确保它没有被标记为&#34;&#34;和&#34; cat&#34;,有各种方法可以做到这一点。

我建议的方法是在SynonymFilterFactory之前的分析中使用StopFilterFactory修改短语:

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt"
                                            ignoreCase="true" expand="false"/>

synonyms.txt中定义的规则可以对多个令牌起作用。例如,如果此规则显示在synonyms.txt

the cat => thecat

然后是双标记序列&#34; cat&#34;将由单个令牌&#34; thecat&#34;取代。因为&#34; thecat&#34;不是你的停止词之一,StopFilterFactory不会对它采取行动。

如果您遵循这种方法,在索引和查询分析中应用此过滤器非常重要(如果它们首先不同)。这样,包含&#34; cat&#34;将有&#34; thecat&#34;在索引中,以及搜索&#34; cat&#34;将有&#34; thecat&#34;在他们的应用查询中。