如果多个文档具有相同的分数,是否可以实现Elasticsearch搜索结果的可靠分页?
我正在尝试使用自定义评分在Elasticsearch中进行实验。我尝试的许多评分表达式产生了许多文档具有相同分数的结果集。它们似乎每次都按照相同的顺序出现,但是能保证吗?
据我所知,特别是在群集中有多个分片时,不能保证。对于给定的Elasticsearch查询而言,具有相等得分的文档以随机、不确定的顺序返回,即使底层数据库没有更改(因此分页是不可靠的),除非满足以下条件之一:
1. 使用function_score来保证每个文档的得分是唯一的(例如通过使用唯一编号字段)。 2. 使用sort并确保排序定义了一个总序列(例如通过使用唯一字段作为回退,如果其他所有内容都相等)。
有人能确认这一点并可能指出一些参考资料吗?
我正在尝试使用自定义评分在Elasticsearch中进行实验。我尝试的许多评分表达式产生了许多文档具有相同分数的结果集。它们似乎每次都按照相同的顺序出现,但是能保证吗?
据我所知,特别是在群集中有多个分片时,不能保证。对于给定的Elasticsearch查询而言,具有相等得分的文档以随机、不确定的顺序返回,即使底层数据库没有更改(因此分页是不可靠的),除非满足以下条件之一:
1. 使用function_score来保证每个文档的得分是唯一的(例如通过使用唯一编号字段)。 2. 使用sort并确保排序定义了一个总序列(例如通过使用唯一字段作为回退,如果其他所有内容都相等)。
有人能确认这一点并可能指出一些参考资料吗?
如果我知道只有一个主分片没有任何副本(参见其他类似问题:在具有等效得分的文档的主/副本之间结果排序不一致),这会改变吗?例如,如果我保证只有一个分片,并且在两次调用相同查询之间数据库没有更改,则该查询将以相同顺序返回结果吗?
还有其他选择吗(如果有)?
_score
排序,然后再根据某些次要的、用于打破平局的字段进行排序。 - Lee H