弹性搜索分页

时间:2016-09-19 15:04:51

标签: elasticsearch paging

我必须从弹性搜索中查询记录并将其显示在页面大小为1000的网格中。我的索引可以包含超过100万条记录。

由于index.max_result_window的10,000限制,我无法再使用from + size查询进行分页。由于性能原因,我不想增加此限制。

我正在使用scroll api进行分页和循环记录以显示所需的页面。例如如果有人请求第9页,我会滚动9次。

它适用于初始页面但你可以想象去最后一页很慢。

我不是弹性搜索方面的专家,所以有什么建议可以改进吗?

提前致谢

  

编辑2016年9月21日

版本:Elasticsearch 2.4.0

滚动示例:https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

滚动尺寸:1000

因此,如果我有10,00,000条记录到达最后一页,我必须滚动1000次。

此外,用户还可以选择返回,滚动不支持。所以我必须从头开始滚动。

我认为应该有更好的方法来做到这一点。

1 个答案:

答案 0 :(得分:1)

我认为没有排序类型设置为“_doc”的滚动查询的行为类似于增加max result window大小,因为您仍然按照仍然支付费用的分数的顺序返回结果深度分页。

如果您不关心结果集的顺序,则排序为“_doc”。 见this。虽然这仍然不会让你回去,因为这不是滚动的工作方式。

如果你确实希望文档按照得分的顺序,并且想要随时切换页面,除了增加max result window大小之外别无他法。 在您实际开始深度分页之前,增加max result window实际上不会以任何其他方式影响性能,如果您希望基于分数进行分页,则实际上没有任何其他方法可以避免这种情况。

他们只能在您的应用程序中执行的其他操作是异步请求所有页面并存储结果,然后在用户实际请求时从中获取结果。