在 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 的单词功能)。
我想在用户输入更多单词时通过在标记同情结果之间使用 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 的单词功能)。