Solr 提升特定字段值

标签 solr solr5

我正在尝试提高从 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. 标准查询解析器

method a) q: field1:(value1)^5 OR field2:(value2)^2 // no results

method b) q: *:* OR field1:(value1)^5 OR field2:(value2)^2 // no results

method c) q: (value1)^5 OR (value2)^2 // incorrect. looks for complete match.

method d) q: (value1)^5 (value2)^2 // incorrect. looks for complete match

  1. EDisMax 查询解析器

(defType=edismax)

问:*:*

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

这个问题的问题是结果没有按预期顺序排列。 具有 field1:somethingElse 和 field2:somethingElse2 的文档比具有 field1:somethingElse 和 field2:value2 的文档得分更高。

任何人都可以看到我做错了什么或有建议来提高我的搜索查询的相关性吗?

最佳答案

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

关于Solr 提升特定字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39114582/

相关文章:

solr - Nutch 1.11(1.x) 和 Solr 5.3.1(5.x) 之间的集成

ruby-on-rails - Letsencrypt Solr SSL JVM

solr - 使用 solrJ 就地更新

AWS EC2 机器上的 Solrcloud 配置

Solr 过滤器查询和提升

mongodb - 将 ObjectID 作为字符串导入

php - 如何在查询时删除solr中的动态字段后缀,如_i,_ txt?

SolrCloud 与独立 Solr

mysql - 如何在不获取 maxBooleanClause 异常的情况下查询具有 98,000 个 id 的 SOLR

solr - 是否有 SolrJ 查询构建器?