在Elasticsearch中模拟随机分页的滚动条或search_after哪个更好?

时间:2018-06-22 07:25:38

标签: elasticsearch pagination

我想随机跳转到Elasticsearch结果的页面。在Elasticsearch中分页有三种方法:

  • 来源/大小-由于最大深度限制为10000,因此我无法使用它。
  • 滚动API -我可以使用它,但是它具有与之相关的内存使用成本(使搜索上下文保持活动状态)。
  • search_after -即使它比滚动便宜,因为它是无状态的,我也可以使用它。

我知道无论如何,Elasticsearch都会顺序读取数据。假设我要获得第99页,那么elastic将读取所有98个结果以得到第99页的结果。

我可以做一件事,即减少我将在目标数据之前顺序获取的数据,在这种情况下,我将减少返回的98页数据,而对于第99页,我将获取完整数据。

我的主要问题是:“如果我没有内存问题,那么哪种方法可以更快地顺序获取98页呢?” (search_after或滚动)

如果我使用滚动条,则每次使用后都会清除它。

3 个答案:

答案 0 :(得分:1)

如果您没有内存问题,那么最简单的选择是将索引设置 index.max_result_window 从10000增加到所需的数字。

请参见https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html#dynamic-index-settings

答案 1 :(得分:0)

基于基准标记(实现了search_after和滚动,然后进行了测试),我发现对于随机分页,滚动要比search_after更好。

答案 2 :(得分:0)

Scroll API是对大型记录进行分页的最佳选择。我已经实现了超过40万条记录的滚动API分页。