使用 search_after 分页按 _doc 排序的 Elasticsearch 不保持顺序

Elasticsearch sorting by _doc with pagination using search_after does not maintain order

我需要对 ES 进行分页搜索调用。我使用 _doc 作为排序键,使用 search_after 获取下一页,因为我不关心顺序,只要每次搜索时顺序一致即可。但是,我发现返回的对象在每个搜索请求中都以不同的顺序排序。在分页的情况下,这实际上会导致问题,因为在调用获取下一页时,我经常看到与上一页相同的文档。

我是不是误解了 _doc 应该如何使用?如果我想要一致的排序,我还有哪些其他选择。

我正在使用ES 5.5

您可以使用 _uid 进行排序,但使用 _uid 进行排序在内存使用方面是一项昂贵的操作。请检查此 https://github.com/elastic/kibana/issues/11925

当前文档建议使用每个文档具有一个唯一值的字段作为决胜局,这应该是另一个启用文档值的字段中 _id 字段的副本。

请参阅此处的 search_after 文档,特别是第一个注释: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-after.html