【问题标题】:How does Lucene compute multifield score?Lucene 如何计算多字段分数?
【发布时间】:2009-04-24 12:57:10
【问题描述】:

这是 Lucene 评分公式:

score(q,d) = coord(q,d) · queryNorm(q) · ∑ ( tf(t in d) · idf(t)2 · t.getBoost() · norm(t,d))

多字段评分呢?

分数是直接求和或平均还是..?

【问题讨论】:

    标签: lucene information-retrieval


    【解决方案1】:

    你可以在Similarity课堂阅读评分详情。在这个等式中,当参数实际表示字段时,参考文档引用参数。因此,术语频率是文档中给定字段中术语的频率。这会自动处理多个字段的查询。

    KenE 上面的回答是不正确的。 (等式中没有 MAX 运算符。)字段上每个查询的分数加起来就是最终分数。对于查询 (name:bill OR gender:male),结果是 (name:bill) 和 (gender:male) 的得分之和。通常,同时满足这两个标准的文档将得分更高(由于总和)并出现。

    【讨论】:

      【解决方案2】:

      这取决于操作。如果您正在执行 OR (姓名:比尔 OR 性别:男性),则需要两者中的最大值。如果你在做 AND,它会做一个 sum。

      【讨论】:

        【解决方案3】:

        Shashikant Kore 正确地说每个字段的分数是相加的。然而,这仅在 queryNormcoord 因素的贡献之前是正确的,这意味着最终的分数不可能加起来。

        每个分数都乘以 queryNorm 因子,该因子是针对每个查询计算的,因此对于 (name:bill)(gender:male)(name:bill OR gender:male) 中的每一个都不同。组合查询的 queryNorm 也不仅仅是两个单项查询的 queryNorms 的总和。因此,只有将每个分数除以该查询的 queryNorm 因子时,分数才会相加。

        coord 因素也可能产生部分影响:默认计分器将分数乘以匹配的查询词的比例。因此,您只能在考虑所有术语匹配的queryNorm(或禁用coord)后才能依赖求和。

        您可以使用 explain 功能准确地计算分数,该功能在 Solr 中通过 debugQuery=true 参数提供。

        【讨论】:

          【解决方案4】:

          使用 lucene 的默认相似度得分,我使用了布尔查询并得到了最终公式如下:(对不起,它在 latex

          score(q, d) = \sum_{f \in fields} \sum_{t \in query} idf(t, f) queryNorm(query) \times idf(t, f) tf(t, d, f) fieldNorm(f)
          

          【讨论】:

          • 这是基于 lucene 5_3_0
          猜你喜欢
          • 1970-01-01
          • 2012-05-08
          • 1970-01-01
          • 1970-01-01
          • 2013-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-02
          相关资源
          最近更新 更多