【问题标题】:Refine search results for more words in SOLR优化 SOLR 中更多单词的搜索结果
【发布时间】:2019-09-24 05:37:01
【问题描述】:

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

我尝试设置qo=AND,但不起作用并返回仅包含一个输入单词的结果。

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

<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, ... )

并在两者都匹配的地方返回结果。

【问题讨论】:

  • 参数是q.op=AND。分析页面还将告诉您在每一侧都生成了哪些令牌,因此输出将告诉您为什么两个输入都被击中。一般来说,ngramfilters 在索引和查询时都会给你奇怪的结果(即hell 查询会打击hole,因为两者都会生成令牌h
  • @MatsLindh 是的,你说得对,谢谢!

标签: solr


【解决方案1】:

参数是q.op=AND

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

一般来说,NGram 过滤器(和标记器)在索引和查询都会给你奇怪的结果(即地狱查询会打击空洞,因为两者都会生成标记 h)

通常您只想在索引时使用 ngram(以获取自动完成/单词开头功能)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 2016-11-13
    • 1970-01-01
    相关资源
    最近更新 更多