我有一个包含许多文档和索引字段的Solr实例.
我现在想要在查询上应用一个停用词列表以增加结果数量,方法是在查询时完全忽略停用词列表中包含的单词.
因此,在我的配置中,我solr.StopFilterFactory在query分析仪中使用.
我期待的是,如果我只使用停用词列表中的单个单词执行搜索,则结果集与通配符查询相同text_title:*,即完整文档集.
但相反,我得到0结果.我错过了关于停用词过滤器行为的一些内容吗?
solr.StopFilterFactory
此过滤器丢弃或停止分析给定停用词列表上的标记。Solr 配置目录中包含标准停用词列表,名为 stopwords.txt,适用于典型的英语文本。
https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-StopFilter
此过滤器实际上删除了查询中的标记,而不是替换为*
Example :
In: "To be or what?"
Tokenizer to Filter: "To"(1), "be"(2), "or"(3), "what"(4)
Out: "To"(1), "what"(4)
Run Code Online (Sandbox Code Playgroud)
尝试使用这个过滤器。
solr.SuggestStopFilterFactory
与停止过滤器类似,此过滤器会丢弃或停止分析给定停用词列表中的标记。建议停止过滤器与停止过滤器的不同之处在于,它不会删除最后一个令牌,除非它后面跟着令牌分隔符。
您通常会在索引分析器中使用普通的 StopFilterFactory,然后在查询分析器中使用 SuggestStopFilter。
如果停止词后面没有标记分隔符,则此过滤器将从您的查询中删除停止词。
如何使用:
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SuggestStopFilterFactory" ignoreCase="true" words="stopwords.txt" format="wordset"/>
</analyzer>
Run Code Online (Sandbox Code Playgroud)
例子 :
In: "The The"
Tokenizer to Filter: "the"(1), "the"(2)
Out: "the"(2)
Run Code Online (Sandbox Code Playgroud)