Lucene查询中boost 0的含义

Meaning of boost 0 in Lucene query

Lucene 查询中“^0”的含义是什么?

来自 documentation:“^”运算符用于增强查询中的热度。但是当你提升 0 的值时会发生什么。

它在我作为参考的代码库中的使用方式让我想知道它是否被用作运算符“+”的替代品,也就是使热成为必须而不是应该,但我找不到任何确认这个理论。

此类查询的一个示例是:

(SubscriptionId:"5938577c72c848271892f78d"^0)

提升是在确定应用它的特定术语(在您的示例中,即订阅 ID)的相关性得分时使用的乘数。

将此乘数设置为 0 的效果是使与该词相关的分数也为零。但是,分数仍在计算 - 因此仍然可以返回相关文件。

再看你的具体例子:因为query中只有一个term,而且因为那个term的boost为零,那么任何命中的总分也将是零,因为没有其他“可评分的”查询中的信息。所以,你会受到打击。而且他们的分数都是0.

如果您将此与其他术语结合使用(其中那些其他术语未“降低”为零),那么它的效果仍然是找到那些文档,但以这样的方式对它们进行评分零提升项不会对总分有任何贡献。

提升为零的术语不会使该术语成为强制性术语。

如果您有这样的查询:

apples oranges^0

如果您有一些文档仅包含 apples,其他文档仅包含 oranges,还有一些文档同时包含这两个词,那么您将对所有此类文档都进行匹配。

以下是使用上述示例(以及 bananas 的一些经典解析器查询结果):

Query string: apples oranges^0
Parsed query: body:apples (body:oranges)^0.0

  doc = 0
  score = 0.3648143
  field = apples

  doc = 2
  score = 0.2772589
  field = apples oranges

  doc = 4
  score = 0.2772589
  field = apples bananas

  doc = 1
  score = 0.0
  field = oranges

  doc = 5
  score = 0.0
  field = oranges bananas

请注意文档 15 如何得分为零 - 但仍返回给您。

注意文档 0 是如何返回的。

如果您使用了以下查询:

apples oranges

然后你会得到匹配,但顺序不同,因为现在术语 oranges 也对整体相关性分数有贡献。

(不允许负提升 - 它们会抛出解析错误。)


您可以在此处查看提升如何融入得分的概述:scoring overview。具体实施细节可能会有所不同(当然,您可能会使用完全不同的自定义记分器)。但这显示了一般方法。