使用 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
我需要对 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