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

gk7wooem  于 2022-11-23  发布在  Lucene
关注(0)|答案(1)|浏览(118)

我有两份文件:

{
    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

一个文档与第一个增强查询匹配,另一个文档与另一个增强查询匹配。它们具有相同的增强值。
我希望这两个文档得到相同的分数,但是它们得到的结果不是这样的

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

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

    • 有谁能解释一下为什么它们都匹配其中一个boost查询,却得到如此不同的分数?**
wlzqhblo

wlzqhblo1#

我猜这种混乱源于“查询被相同的值提升”--这不是真的--提升是 * 查询本身的得分 *,然后被你的^10放大10倍。
bq是加性的--来自查询的得分被添加到文档的得分(而boost是乘法的,得分被乘以增强查询)。
如果您希望根据任一匹配项向原始查询添加相同得分值,则可以使用^=10,这将使查询得分保持不变(无论文档得常规得分是多少,该术语得得分都将是10).
此外,如果您希望应用这些相互独立的因子(而不是作为一个单一的、合并的分数,同时应用两个因子的贡献),请使用多个bq条目。

相关问题