当结果具有相同的分数时,在Elasticsearch中进行分页

Ant*_*łka 6 pagination scoring elasticsearch

如果多个文档具有相同的分数,是否可以实现elasticsearch搜索结果的可靠分页?

我在弹性搜索中尝试自定义评分.我尝试的许多得分表达式产生结果集,其中许多文档具有相同的分数.每次尝试时它们似乎都以相同的顺序出现,但可以保证吗?

AFAIU它不能,特别是如果集群中有多个分片.具有相同分数的文件.给定的elasticsearch查询以随机,非确定性顺序返回,即使基础数据库不发生更改(因此分页不可靠),也可以在同一查询的调用之间进行更改,除非以下其中一项成立:

  1. function_score用来保证每个文档的分数是唯一的(例如,通过使用唯一的数字字段).
  2. 我使用sort并保证排序定义总顺序(例如,如果其他条件相同则使用唯一字段作为后备).

任何人都可以确认(并可能指出一些参考)?

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

还有什么其他选择(如果有的话)?

Pet*_*rta 5

在可能发生相同分数的情况下,我最终使用了额外的排序 - 例如按产品类别搜索。这个额外的排序可以是 id、创建日期或类似的。设置为 2 个服务器、3 个分片和 1 个副本。