【问题标题】:Lucene scoring: in what context is queryNorm used?Lucene 评分:在什么情况下使用 queryNorm?
【发布时间】:2013-05-23 00:06:32
【问题描述】:

我对 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) 在哪种情况下有用?

【问题讨论】:

    标签: search lucene search-engine


    【解决方案1】:

    好问题,我自己也想过这个问题。根据this ScoresAsPercentages argument 的说法,尝试比较不同查询或索引的分数,甚至是同一查询和索引在不同时间的分数,是个坏主意,我同意。

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

    我想它还可以让人们编写自己的相似性,并使用此调用创建标准化的、可比较的分数,使用适用于他们特定情况的算法。

    有一些discussion on dropping it,你可能会觉得有趣。

    【讨论】:

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

    我知道这个问题很老,但我遇到了类似的问题。 queryNorm 在所有搜索结果中不一样的原因是文档可以在不同的 shard 中,而 queryNorm 仅在同一个 shard 中是恒定的。

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

    • 自然,当有大量数据时

    • 将分片数设置为 1。当然这会对性能产生影响。

      { “设置”:{“number_of_shards”:1} }

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

    【讨论】:

      猜你喜欢
      • 2016-12-22
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 2017-11-30
      • 2021-07-06
      • 2014-01-25
      相关资源
      最近更新 更多