我有一个包含许多文档和索引字段的Solr实例。
我现在想在查询上应用停用词列表,以增加结果的数量,在查询时完全忽略包含在停用词列表中。
因此,在我的配置中,我在solr.StopFilterFactory
分析器中使用query
。
我期待的是,如果我只使用停用词列表中的单个单词执行搜索,则结果集与通配符查询text_title:*
相同,即完整文件集。
但我得到0结果。我错过了关于停用词过滤器行为的一些内容吗?
答案 0 :(得分:0)
solr.StopFilterFactory
此过滤器会丢弃或停止分析给定停用词列表中的令牌。标准停用词列表包含在Solr配置目录中,名为stopwords.txt,适用于典型的英语语言文本。
https://cwiki.apache.org/confluence/display/solr/Filter+Descriptions#FilterDescriptions-StopFilter
此过滤器实际上删除了查询中的令牌,而不是用*
替换
示例:
In: "To be or what?"
Tokenizer to Filter: "To"(1), "be"(2), "or"(3), "what"(4)
Out: "To"(1), "what"(4)
尝试使用此过滤器 的 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>
示例:
In: "The The"
Tokenizer to Filter: "the"(1), "the"(2)
Out: "the"(2)