使用Elastic Search API中的search_after参数结束搜索结果

时间:2017-10-27 15:14:40

标签: elasticsearch

对于查询中的给定日期范围和search_after参数,我能够成功提取相关结果。如何确定我是否在给定日期范围的搜索结果的末尾,并且我不必继续使用search_after参数进行查询。

2 个答案:

答案 0 :(得分:2)

有一个非常酷的“技巧”,它不涉及任何额外的查询或对结果总数的了解:

假设您的页面大小为 20。与其要求 elasticsearch 提供 20 个结果,不如要求它提供 21 个。

  • 如果您返回 21 个结果,请仅使用其中的前 20 个。但是您现在知道下一个查询至少会多出一个结果(如果您将第 20 个结果的 sort 值用于 search_after 参数,而不是第 21 个!)。

  • 如果您得到 20 个或更少的结果,则不会有其他结果。

这个 github 问题提供了更多细节,说明为什么 elasticsearch 没有开箱即用的功能:https://github.com/elastic/elasticsearch/issues/22364

答案 1 :(得分:0)

您可以一直查询直到它开始返回零结果,或者它确实返回总数,因此您可以跟踪已检索的总数,并在达到总数后停止搜索。 (我将两者结合在一起)