Solr如何提升特定字段值的权重?

3

我正在尝试提高Solr搜索返回文档的得分。

我想要实现的加权是这样的:

field1:(value1)^5 OR field2:(value2)^2 

如果文档中有字段1与值1匹配,则提高5倍。 如果文档中有字段2与值2匹配,则提高2倍。

这些文档有许多字段,我们称之为字段1、字段2等,可能缺少某些字段。

这些文档不需要具有与值1、值2相匹配的字段1或字段2。

我还有其他过滤查询,例如:

fq: field1:[* TO *]  <- checking for presence of

fq: field3: ("something" "somethingelse")

fq: field4: 1

我正在按照某个在任何查询中都未使用的字段对结果进行分组。

原始查询参数:

group=true&group.facet=true&group.field=anIndependentField

我正在使用相同的fq,尝试了不同的查询解析器。

Solr中有足够的文档,其中包含field1:value1和/或field2:value2以及这些字段的其他值。

到目前为止,我尝试使用以下查询解析器:

  1. 标准查询解析器

方法a)q:field1:(value1)^5 OR field2:(value2)^2 //没有结果

方法b)q:*:* OR field1:(value1)^5 OR field2:(value2)^2 //没有结果

方法c)q:(value1)^5 OR (value2)^2 //不正确。寻找完全匹配。

方法d)q:(value1)^5 (value2)^2 //不正确。寻找完全匹配。

  1. EDisMax查询解析器

(defType=edismax)

q:*:*

bq: field1:(value1)^5 OR field2:(value2)^2 

这个问题的关键在于结果并不是按照预期的顺序排序的。一个包含field1:somethingElse和field2:somethingElse2的文档得到的评分比一个包含field1:somethingElse和field2:value2的文档的评分要高。

有没有人能够看出我做错了什么或者有任何建议来提高我的搜索查询的相关性?


你尝试过拆分 bq 参数吗?&bq=field1:value1^5&bq=field2:value2^2 - MatsLindh
1个回答

2
你可以按照以下方式使用eDismax查询解析器的bf参数:
bf=if(termfreq(field1,"value1"),5,if(termfreq(field2,"value2"),2,1))

请查看下面的完整查询。
https://<MY_SERVER_NAME>:9443/solr/<MY_COLLECTION>/select?q=*%3A*&wt=json&indent=true&defType=edismax&bf=if(termfreq(field1%2C%22value1%22)%2C3%2Cif(termfreq(field2%2C%22value2%22)%2C2%2C0))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接