Lucene多索引:如何标准化文档评分?

3
假设我有多个Lucene索引(不是副本)分布在几台电脑上。
我查询每个索引,然后合并结果。是否有一种方法可以标准化文档分数,以便我可以按得分(相关性)排序?
我的意思是,来自索引A的文档A的分数与来自索引B的文档B的分数不能进行比较,除非我进行某种归一化...对吗?
谢谢 Roey
2个回答

4
首先,阅读Lucene相似性文档。其中所有要素中,唯一一个因索引不同而不同的是逆文档频率 (idf)
我建议您使用Luke或调试器来查看不同索引的idf的影响。您可能会发现这只有很小的影响。
这里有一个关于使用全局idf的讨论,以及一个Solr分布式搜索设计的Wiki页面。我相信这个问题还没有得到解决。
Lucene评分不容易进行简单的标准化处理。我建议您尽量使文档分布随机,并比较两个索引的命中次数排名情况。

1
+1 用于随机分配文档。您必须确保这确实是一个问题。在大多数情况下,索引之间不同的DF值并不会对您造成太大影响。 - bajafresh4life
我意识到这是一个旧答案,但是只是想让您知道有一些链接已经失效了。 - Andy McCluggage
@AndyMcCluggage - 我已经更新了到当前Lucene版本的损坏链接。这应该可以让你使用一年左右,直到Lucene版本超过当前版本。 - Yuval F

-1

为了比较文档A在索引X和Y上的得分,我计算出:x=score(A,X)/搜索索引X上任何一个命中的文档最高得分y=score(A,Y)/搜索索引Y上任何一个命中的文档最高得分

现在x和y的值都在0到1之间。只需将它们相加即可得到最终得分。

这是一种简单的方法。我想听听您对此的看法。

但我不明白为什么要将两个不同文档的得分相加。使用案例是什么?


我认为你误解了问题。问题是如何规范化跨结果集的分数,这对于在一堆索引中执行搜索并显示最相关的结果非常有用。担心的是每个索引的内容会影响结果的评分。如果索引X关键字“摩托车”的频率很低,它可能会高度评分包含该关键字的文档。当合并针对索引Y的相同搜索时,假设该关键字的频率很高,来自X的文档可能会比来自Y的潜在更相关的文档得到更高的评分。 - Tyler Hoppe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接