在 SOLR 中优化更多单词的搜索结果

Refine search results for more words in SOLR

我想在用户输入更多单词时通过在标记同情结果之间使用 AND 运算符来优化搜索结果。

我试过设置 qo=AND 但没有用,return 结果只包含一个输入的单词。

例如我使用这样的字段搜索分析器:

<fieldType name="serch_text" class="solr.TextField">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory"/>
    <filter class="solr.TrimFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.EdgeNGramFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
    <filter class="solr.TrimFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

所以对于查询 searching:(hel world) 我想为每个单词应用分析器并在结果之间执行 AND。在实践中,我期待这样的事情:

(hel 比较 h, he, hel, hell, hello) AND (world 比较 w, wo, ...)

和 return 结果两者都匹配。

参数是q.op=AND

分析页面还会告诉您每一侧生成了哪些令牌,因此输出会告诉您为什么两个输入都被命中。

一般来说,NGram 过滤器(和分词器)在索引和查询时都会给你奇怪的结果(即 hell queried 会给出一个 hit against hole,因为两者都会生成 token h)

通常您只需要在编制索引时使用 ngram(以获得 autocomplete/start 的单词功能)。