主要/副本不一致的评分

时间:2015-06-19 21:13:24

标签: elasticsearch

我们有一个群集,每个主要有3个主分片和2个副本。主要/副本分片的总doc数相同;但是,我们为同一个查询/文档获得了3个不同的分数。当我们将preference = primary添加为查询参数时,我们每次都会获得一致的分数。

我们能想到的唯一解释是主要/副本之间不同的DF计数。主/副本分片之间的不一致性,以及如何解决这个问题?我们正在使用1.4.2。

修改 我们只是重新编制了我们查询的文档类型,但是仍然评分不一致。

1 个答案:

答案 0 :(得分:2)

主要和副本分片在分段合并时有不同的“路径”。意思是,段的数量和大小可能因它们而异。每个共享都独立于其他分片来处理自己的段。

为什么在计算分数时这很重要,因为合并是实际删除了删除的文档的时刻。在此之前,已删除的文档仅标记为已删除(并在查询已运行后从查询结果中取出)。因此,这意味着它可以影响计算得分的算法。

更具体一点 - 分片中的文档总数用于[IDF计算](http://lucene.apache.org/core/4_3_0/core/org/apache/lucene/search/similarities/DefaultSimilarity.html#idf(long,长))和文档频率(docFreq):

return (float)(Math.log(numDocs/(double)(docFreq+1)) + 1.0)

此数量的文档包括已删除(标记为已删除,更准确)的文档。另请参阅this github issue and Simon's comments关于同一主题的内容。

相关问题