我对 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))
我理解这个公式中的每个组成部分,除了查询范数(q)。正如官方文档所解释的,
queryNorm(q) 是一个标准化因子,用于在
查询具有可比性。该因素不影响文档排名
(因为所有排名文档都乘以相同的因子),但是
而只是尝试从不同的查询中获得分数(甚至
不同指标)具有可比性。
为什么我需要比较不同查询之间的分数?换句话说,你能给出一个example显示在哪个上下文中查询范数(q)有用吗?
好问题,我自己也想知道这个问题。根据这个 ScoreAsPercentages 参数 http://wiki.apache.org/lucene-java/ScoresAsPercentages,尝试比较不同的查询或索引分数,甚至同一查询和索引在不同时间的分数,是一个坏主意,我同意。
我的理解是,虽然queryNorm
确实并不会让它们严格具有可比性,但确实有帮助。与不使用默认查询规范相比,它们更接近于具有可比性。
我想它还可以让人们编写自己的相似性,并使用此调用来创建标准化的、可比较的分数,使用适合其特定情况的算法。
已经有一些关于放弃它的讨论 http://lucene.472066.n3.nabble.com/Whither-Query-Norm-td600443.html,您可能会觉得有趣。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)