您能告诉我如何按查询中的单词顺序对Solr中的文档结果进行排序吗?
例如,如果我输入查询两个单词milk
和chocolate
,我想要包含这些单词的相同顺序的增强文档。
在我的查询中:
http://localhost:8983/solr/product/select?defType=edismax&fl=*%2C%20score&q.op=AND&q=chocolate+milk&qf=title_token%5E10
您会看到我有查询chocolate milk
,该查询的结果是:
{
id: 3346664,
title: "Milk with chocolate",
_version_: 1648030883251224600,
score: 79.53341
},
{
id: 8754567,
title: "Chocolate of Milk",
_version_: 1648030883402219500,
score: 79.53341
},
{
id: 345428,
title: "Delicious Thins Milk Chocolate",
_version_: 1648030884582916000,
score: 74.86635
}
您可以看到我的前2个文档具有相同的score
,但第一个是匹配单词顺序与查询中的单词不同的文档。您能告诉我如何增强匹配查询词顺序的文档吗?谢谢。
我的标题令牌字段具有以下配置:
<fieldType name="text_token" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.ASCIIFoldingFilterFactory" preserveOriginal="true"/>
<filter class="solr.TrimFilterFactory"/>
<filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:0)
您可以在edismax查询解析器中使用pf2
和pf3
参数:
pf2参数
一个多值字段列表,具有基于单词带状对的可选权重。
pf3参数
一个多值字段列表,其具有可选的权重,基于单词带状结构的三元组。与pf相似,除了它不是在输入中所有单词的每个字段中构建一个短语,而是在每个单词带状结构的三元组中为每个字段构建一组短语。
带状疱疹是两个单词的组合,即“巧克力牛奶”。您还希望添加一个停用词过滤器,以便从令牌流中删除of
。
pf2=title^5
..将对查询中的单词彼此依次出现的单词加5倍。
您还可以添加一个显式的带状疱疹过滤器,该过滤器在编制索引时将标记集组合在一起,然后对该字段进行增强处理。