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

时间:2014-11-24 12:03:53

标签: elasticsearch pagination scoring

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

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

AFAIU它不能,尤其是如果群集中有多个分片。具有相同分数的文件。给定的elasticsearch查询以随机的,非确定性的顺序返回,即使底层数据库没有改变(因此分页不可靠),也可以在同一查询的调用之间进行更改,除非满足以下条件之一:

  1. 我使用function_score来保证每个文档的分数都是唯一的(例如,使用唯一的数字字段)。
  2. 我使用sort并保证排序定义了一个总订单(例如,如果其他条件相同则使用唯一字段作为后备)。
  3. 任何人都可以确认(也许可以参考一下)吗?

    如果我知道只有一个没有任何副本的主分片(参见其他类似的查询:Inconsistent ordering of results across primary /replica for documents with equivalent score),这是否会发生变化?例如。如果我保证有一个分片并且在同一个查询的两个调用之间数据库没有变化那么该查询将以相同的顺序返回结果?

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

1 个答案:

答案 0 :(得分:4)

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