使用search_after按_doc和分页排序的Elasticsearch不维护顺序

时间:2017-12-21 12:18:32

标签: sorting elasticsearch pagination elasticsearch-5

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

我误解了_doc应该如何使用?如果我想要一致的订购,我的其他选择是什么。

我正在使用ES 5.5

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

当前文档建议使用每个文档具有唯一值的字段作为平局,这应该与另一个启用了文档值的字段中的_id字段重复。

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