【问题标题】:lucene vs sql result scoringlucene vs sql 结果评分
【发布时间】:2012-07-09 06:54:58
【问题描述】:

鉴于以下查询,我在 SQL 和 Lucene 之间获得了截然不同的排名/评分:

[伪代码] (statut* 在解释 * 的 3 内) AND 矛盾

我不认为这是解析器的问题,因为所有结果似乎都符合查询要求。但是,在前 1000 个结果中,我只得到了 172 个常见结果。由于 Lucene 和 SQL 的所有结果似乎都符合查询要求,我唯一剩下的猜测是评分在某种程度上完全不同。我很难找到任何关于 SQL 如何处理评分的信息,也很难找到比较 SQL 和 Lucene 评分的信息。我不一定期望两个引擎的结果集相同,但我期望超过 10% 的相似性,我至少需要能够解释巨大的差异。

我该如何解释这种显着差异?

【问题讨论】:

  • How can I explain this significant discrepancy? 是什么让您认为两种不同的产品应该使用相似的排名/评分算法?随便用你喜欢的。或者开发自己的评分算法,并在 Lucene.Net 中使用(我不是说这会很容易)

标签: sql lucene full-text-search lucene.net sql-server-2012


【解决方案1】:

来自the documentation on MSDN titled "How Search Query Results Are Ranked"(强调我的):

SQL Server 中的全文搜索可以生成一个可选的分数(或排名 value) 表示由 a 返回的数据的相关性 全文查询。这个排名值是在每一行上计算的,可以是 用作排序标准以对给定查询的结果集进行排序 通过相关性。排名值仅表示相对顺序 结果集中行的相关性。 实际值为 不重要,并且每次运行查询时通常都不同。排名 value 在查询中没有任何意义

也就是说,SQL 全文搜索对结果没有实际价值;它与结果中的其他行相关的唯一值。

将其与 scoring in Lucene 进行比较,这完全取决于您如何索引文档、文档和/或字段是否被提升、过滤器等。

Lucene 中的评分也是一致的,这与 SQL Server 不同,后者没有保证。它甚至反映在名称中,SQL server 中全文查询的结果是 rank 值而不是分数,就像在 Lucene 中一样。

这些值并不完全可比,但这是可以理解的,因为结果也不相同。

【讨论】:

    猜你喜欢
    • 2010-09-05
    • 2011-04-04
    • 1970-01-01
    • 2019-05-04
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多