【问题标题】:Solr Boosting specific field valuesSolr 提升特定字段值
【发布时间】:2016-08-24 04:43:41
【问题描述】:

我正在尝试提高从 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 以及这些字段的其他值。

到目前为止,我已经尝试过使用查询解析器:

  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 参数? &amp;bq=field1:value1^5&amp;bq=field2:value2^2

标签: solr solr5


【解决方案1】:

您可以通过以下方式使用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))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多