Search Lucene评分:queryNorm在什么环境下使用?

Search Lucene评分:queryNorm在什么环境下使用?,search,lucene,search-engine,Search,Lucene,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)) score(q,d)=coord(q,d)x queryNorm(q)x SUM(tf(t_in_d)x idf(t)^2 x t.getBoost()x norm(t,d)) 除了queryNorm

我对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))
score(q,d)=coord(q,d)x queryNorm(q)x SUM(tf(t_in_d)x idf(t)^2 x t.getBoost()x norm(t,d))
除了queryNorm(q)之外,我了解这个公式中的所有成分。正如官方文件所解释的

queryNorm(q)是一个用于在 可比较的查询。此因素不影响文档排名 (因为所有排名的文档都乘以相同的系数),但是 而只是尝试从不同的查询(甚至 不同指标)具有可比性


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

好问题,我自己也很想知道。据我所知,试图比较不同的查询或索引分数,甚至是同一查询和索引在不同时间的分数,是一个坏主意,我同意

我的理解是,虽然
queryNorm
确实不能使它们严格地具有可比性,但它确实有帮助。它们与默认queryNorm相比更接近

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


有一些问题,你可能会觉得有趣。

我知道这个问题很老,但我也有类似的问题。 查询表单在所有搜索结果上都不相同的原因是文档可以位于不同的切块中,并且查询表单仅在同一切块中保持不变

根据我的理解,这个问题可以通过两种方式解决:

  • 当然,当有很多数据的时候

  • 将碎片数设置为1。当然,这会对表演产生影响

    { “设置”:{“碎片数”:1} }


这是一个有趣的线索。我还在船上,让普通用户更多地控制queryNorm不会对搜索工作造成伤害。但是,由于它是按权重计算的,因此不需要担心计算成本。所以回到我的问题,比较不同查询的分数更多地出现在机器学习人员(如文档聚类)中,而很少出现在常见的搜索工作中,对吗?有一些策略可以使查询具有可比性,不必去机器学习(例如,参见)。在Lucene中,这是避免的。比较不同查询之间分数的解决方案是重新考虑您的需求。