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

时间:2013-05-28 06:06:02

标签: 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))

我了解此公式中的每个组件,但 queryNorm(q)除外。正如官方文档所解释的那样,

  

queryNorm(q)是用于在两者之间进行分数的归一化因子   查询可比较。此因素不会影响文档排名   (因为所有排名的文档都乘以相同的因子),但是   而只是尝试从不同的查询(或甚至   不同的指数)可比较。

为什么我需要比较不同查询之间的分数?换句话说,您是否可以使用示例来显示哪个上下文 queryNorm(q)有用?

2 个答案:

答案 0 :(得分:5)

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

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

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

有一些this ScoresAsPercentages argument,您可能会感兴趣。

答案 1 :(得分:0)

我知道这个问题已经过时了,但我遇到了类似的问题。 queryNorm在所有搜索结果中不一样的原因是文档可以在不同的分片中,并且queryNorm仅在同一分片中是常量。

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

  • 当然,当有大量数据时

  • 将分片数量设置为1.这对性能有影响。

    {     “settings”:{“number_of_shards”:1} }

请参阅http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-is-broken.html