我试图提高在solr中搜索返回的文档的分数。
我想要实现的提升是:
field1:(value1)^5 OR field2:(value2)^2
如果文档的field1匹配value1,则增加5。 如果文档的field2匹配value2,则按2提升。
文档有很多字段,我们称之为field1,field2 ......并且可能缺少某些字段。
文档不需要将field1或field2分别与value1,value2匹配。
我还有其他过滤查询,例如:
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以及这些字段的其他值。
到目前为止,我已尝试使用查询解析器:
方法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 //不正确。寻找完整的匹配
(DEFTYPE = edismax)
q:*:*
bq: field1:(value1)^5 OR field2:(value2)^2
这个问题是结果不是预期的顺序。 具有field1:somethingElse和field2:somethingElse2的文档得分高于具有field1:somethingElse和field2:value2的文档。
任何人都可以看到我做错了什么或者有什么建议可以提高搜索查询的相关性吗?
答案 0 :(得分:0)
您可以通过以下方式使用eDismax queryParser的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))