我对Lucene评分策略感到有些困惑。我知道Lucene的得分公式如下:
score(q,d) = coord(q,d) x queryNorm(q) X SUM <t_in_q> ( tf(t_in_d) x idf(t)^2 x t.getBoost() x norm(t,d))
我了解此公式中的每个组件( queryNorm(q)除外)。如官方文档所述,
为什么需要比较不同查询之间的分数?换句话说,您可以举一个示例来显示 queryNorm(q)在哪种上下文中有用吗?
最佳答案
好问题,我自己也对此感到奇怪。根据this ScoresAsPercentages argument的说法,尝试比较不同的查询或索引分数,甚至是在不同时间对同一查询和索引的分数,是一个坏主意,我同意。
我的理解是,尽管queryNorm
确实不能使它们严格可比,但确实可以。与使用default queryNorm相比,它们更接近可比。
我想它还可以使人们编写自己的相似性,并使用适合特定情况的算法,使用此调用来创建标准化的可比分数。
有一些discussion on dropping it,您可能会发现它很有趣。