【问题标题】:Unexpected Solr scores for documents boosted by the same boost values由相同提升值提升的文档的意外 Solr 分数
【发布时间】:2021-02-23 20:37:56
【问题描述】:

我有 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 之类的值,但这没有任何区别(这完全有道理)。

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

【问题讨论】:

    标签: sorting solr lucene sunspot


    【解决方案1】:

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

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

    如果您想根据任一匹配向原始查询添加相同的分值,您可以使用^=10,这会使查询持续得分(该术语的得分将为10,无论文档的常规分数)。

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

    【讨论】:

    • 是的,这绝对是我不了解提升的工作原理。谢谢!
    • 你不会碰巧知道^= 是什么时候添加到solr 中的吗?我使用的是过时的 solr 4.x 版本,如果我没有做错什么,似乎不支持。
    • 我刚刚看到有人提到 Solr 5.1。不确定它是否是第一个版本,但可能 4.0 没有。
    • 没错。 4.0 太旧了,无法支持 Solr 中的大多数现代功能(因为它现在大约 8-9 岁)。您也许可以使用 boost 函数来代替几个 if-s,但我不记得 4.0 支持哪些部分,哪些不支持。
    • 在 Solr 5.1 中添加了恒定评分运算符issues.apache.org/jira/browse/SOLR-7218
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    相关资源
    最近更新 更多