我配置了 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" />
答案 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;在他们的应用查询中。