Lucene得分:在什么情况下使用queryNorm?

Yuh*_*hao 5 lucene search search-engine

我对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))
Run Code Online (Sandbox Code Playgroud)

我理解除了queryNorm(q)之外的这个公式中的每个组件.正如官方文件所解释的那样,

queryNorm(q)是一个归一化因子,用于使查询之间的分数相当.此因素不会影响文档排名(因为所有排名的文档都乘以相同的因子),而只是尝试从不同的查询(甚至不同的索引)进行比较.

为什么我需要比较不同查询之间的分数?换句话说,你能举例说明queryNorm(q)在哪个上下文中有用吗?

fem*_*gon 5

好问题,我自己也想知道这件事.根据这个ScoresAsPercentages论点,尝试在不同时间比较不同的查询或索引分数,甚至是同一查询和索引的分数,这是一个坏主意,我同意.

我的理解是,虽然queryNorm它确实没有使它们具有严格的可比性,但它确实有帮助.它们与Default queryNorm相比更接近于没有.

我想它也可以让人们编写自己的相似性,并使用这个调用来创建规范化的,可比较的分数,使用在他们的特定情况下工作的算法.

有一些关于放弃它的讨论,你可能会觉得有趣.