按 _doc 对文档排序时结果不一致
Inconsistent results when sorting documents by _doc
我想使用 sort+search_after 分页机制获取 elasticsearch 命中。
elasticsearch 文档指出:
_doc has no real use-case besides being the most efficient sort order. So if you don’t care about the order in which documents are returned, then you should sort by _doc. This especially helps when scrolling.
但是,当多次执行相同的查询时,我得到不同的结果。更具体地说,第一个命中在两个不同的命中之间随机交替,其中返回的 sort
字段对于一个命中是 0
,对于另一个命中是一些特定的数字。
这显然会破坏分页,因为它依赖于 sorting
中返回的值,稍后将被送入 sort_after
以进行下一次查询。
查询时没有数据写入索引,所以这不是因为刷新。
因此我的问题是:
- 分页按_doc排序是不是错了?似乎我得到的结果不一致。
- 内部如何按 _doc 排序?缺少这方面的文档,因为它只是说明排序是按“索引顺序”执行的。
使用 Spark 将数据并行写入索引。我认为问题可能是并行写入与“索引顺序”排序相结合,但是我没有设法用其他也在 Spark 中写入的索引复制此行为。
es 7,索引包含2个分片,一主一副本
干杯。
发生这种情况的原因是索引由 2 个分片组成。一个主要的和一个副本。文档未按相同顺序编入索引。因此,结果的顺序取决于返回它们的分片。这在使用滚动时很好,因为 Elasticsearch 会保留结果的内部状态,但不会使用无状态的分页。
我想使用 sort+search_after 分页机制获取 elasticsearch 命中。
elasticsearch 文档指出:
_doc has no real use-case besides being the most efficient sort order. So if you don’t care about the order in which documents are returned, then you should sort by _doc. This especially helps when scrolling.
但是,当多次执行相同的查询时,我得到不同的结果。更具体地说,第一个命中在两个不同的命中之间随机交替,其中返回的 sort
字段对于一个命中是 0
,对于另一个命中是一些特定的数字。
这显然会破坏分页,因为它依赖于 sorting
中返回的值,稍后将被送入 sort_after
以进行下一次查询。
查询时没有数据写入索引,所以这不是因为刷新。
因此我的问题是:
- 分页按_doc排序是不是错了?似乎我得到的结果不一致。
- 内部如何按 _doc 排序?缺少这方面的文档,因为它只是说明排序是按“索引顺序”执行的。
使用 Spark 将数据并行写入索引。我认为问题可能是并行写入与“索引顺序”排序相结合,但是我没有设法用其他也在 Spark 中写入的索引复制此行为。
es 7,索引包含2个分片,一主一副本
干杯。
发生这种情况的原因是索引由 2 个分片组成。一个主要的和一个副本。文档未按相同顺序编入索引。因此,结果的顺序取决于返回它们的分片。这在使用滚动时很好,因为 Elasticsearch 会保留结果的内部状态,但不会使用无状态的分页。