【发布时间】: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