44

在 Lucene 中,如果您有多个索引,每个索引只覆盖一个分区。为什么在不同的索引上进行相同的搜索会返回不同分数的结果?来自不同服务器的结果完全匹配。

即,如果我搜索:

  • 姓名 - 约翰·史密斯
  • 出生日期 - 1934 年 11 月 11 日

分区 0将返回 0.345 的分数

分区 1将返回 0.337 的分数

两者都完全匹配名称和出生日期。

4

3 回答 3

19

评分包含逆文档频率(IDF)。如果术语“John Smith”在一个分区中,0 次,100 次,在分区 1 中,一次。在分区 1 中搜索 John Smith 的得分会更高,因为该词更稀缺。

为了解决这个问题,您必须让您的索引覆盖所有分区,或者您需要覆盖 IDF。

于 2008-08-02T09:51:00.883 回答
13

因为如果我没有完全弄错的话,分数是在指数上确定的。

如果您有不同的索引(索引的更多/更少或不同的数据),分数会有所不同:

http://lucene.apache.org/core/3_6_0/scoring.html

(警告:包含数学:-))

于 2008-08-02T09:52:36.870 回答
8

您可能还对explain()方法的输出和结果Explanation对象感兴趣,这将使您了解事物的评分方式。

于 2008-08-02T20:03:06.483 回答