当Elasticsearch返回相同得分的结果时,如何进行分页。

7
如果多个文档具有相同的分数,是否可以实现Elasticsearch搜索结果的可靠分页?
我正在尝试使用自定义评分在Elasticsearch中进行实验。我尝试的许多评分表达式产生了许多文档具有相同分数的结果集。它们似乎每次都按照相同的顺序出现,但是能保证吗?
据我所知,特别是在群集中有多个分片时,不能保证。对于给定的Elasticsearch查询而言,具有相等得分的文档以随机、不确定的顺序返回,即使底层数据库没有更改(因此分页是不可靠的),除非满足以下条件之一:
1. 使用function_score来保证每个文档的得分是唯一的(例如通过使用唯一编号字段)。 2. 使用sort并确保排序定义了一个总序列(例如通过使用唯一字段作为回退,如果其他所有内容都相等)。
有人能确认这一点并可能指出一些参考资料吗?

如果我知道只有一个主分片没有任何副本(参见其他类似问题:在具有等效得分的文档的主/副本之间结果排序不一致),这会改变吗?例如,如果我保证只有一个分片,并且在两次调用相同查询之间数据库没有更改,则该查询将以相同顺序返回结果吗?

还有其他选择吗(如果有)?

1个回答

6

我最终使用了额外的排序来处理可能出现相等分数的情况 - 比如按产品类别搜索。这种额外的排序可以是id、创建日期或类似的内容。安装有2个服务器,3个分片和1个副本。


1
这是推荐的方法,首先按_score排序,然后再根据某些次要的、用于打破平局的字段进行排序。 - Lee H
@LeeH,你如何在_id上添加决胜者? - Lion789

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