由相同提升值提升的文档的意外 Solr 分数

问题描述

我有 2 个文件

{
    title: "Popular",registrations_count: 700,is_featured: false
}

{
    title: "Unpopular",registrations_count: 100,is_featured: true
}

我正在运行这个 Solr 查询(通过 Ruby Sunspot gem):

fq: ["type:Event"],sort: "score desc",q: "*:*",defType: "edismax",fl: "* score",bq: ["registrations_count_i:[700 TO *]^10","is_featured_bs:true^10"],start: 0,rows: 30

或者,对于那些更习惯使用 ruby​​ 的人来说:

Challenge.search do    
    boost(10) do
       with(:registrations_count).greater_than_or_equal_to(700)
    end

    boost(10) do
        with(:is_featured,true)
    end

    order_by :score,:desc
end

一个文档匹配第一个 boost 查询,另一个匹配另一个 boost 查询。它们具有相同的提升值。

我希望两个文档得到相同的分数。但他们没有,他们得到了类似的东西

1.2011336 # score for 'unpopular' (featured)
0.6366436 # score for 'popular' (not featured)

我还检查过,如果我提升了他们共同拥有的一个属性,他们会得到完全相同的分数,并且确实如此。我还尝试将 700 值更改为 7000 之类的值,但没有任何区别(这完全有意义)。

谁能解释为什么他们得到如此不同的分数,而他们都匹配一个 boost 查询

解决方法

我猜混淆源于“查询被相同的值提升”——这不是真的——提升是查询本身的分数,然后被你的分数放大 10 倍^10

bq 是加法的 - 查询的分数被添加到文档的分数上(而 boost 是乘法的,分数乘以 boost 查询)。

如果您想根据任一匹配将相同的分数值添加到原始查询中,您可以使用 ^=10 使查询恒定评分(该词的分数将为 10 ,不考虑文档的常规分数)

此外,如果您想应用这些相互独立的因素(而不是作为两个因素贡献的单个合并分数),请改用多个 bq 条目。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...