Solr停用词和空查询

Lor*_*con 5 solr stop-words

我有一个包含许多文档和索引字段的Solr实例.

我现在想要在查询上应用一个停用词列表以增加结果数量,方法是在查询时完全忽略停用词列表中包含的单词.

因此,在我的配置中,我solr.StopFilterFactoryquery分析仪中使用.

我期待的是,如果我只使用停用词列表中的单个单词执行搜索,则结果集与通配符查询相同text_title:*,即完整文档集.

但相反,我得到0结果.我错过了关于停用词过滤器行为的一些内容吗?

Ash*_*lam 1

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)