ScrollApi的ElasticSearch分页向前和向后移动

时间:2019-07-11 14:30:10

标签: java elasticsearch pagination

是否可以使用ScrollApi在ElasticSearch中进行分页前进和后退?

经典解决方案(setFrom(),setSize())不适合,因为windows_size很小。

scrollApi下面的代码可以无限滚动。

if (parameters.getOffset() == 1) {
    SearchRequestBuilder searchRequestBuilder = client.prepareSearch(MY_INDEX).setTypes(documentsType);
    //...
} else {
    //
    SearchResponse scrollResponse = client.prepareSearchScroll(parameters.getScrollId())
            .setScroll(TimeValue.timeValueMinutes(1)).get();
    //...
}

2 个答案:

答案 0 :(得分:0)

是的,当总结果计数大于10000时,可使用滚动api来分页响应。 它是这样工作的: 1.使用滚动关键字和大小(指示每页结果数)首次搜索ES 2.因此,ES将向您返回第一批结果和滚动ID。 3.在下次调用ES时,您需要传递相同的滚动ID以及size参数,以获取下一批,依此类推。

如果您有前端,则可以在结果中传递滚动ID,以便来自UI的下一个调用在请求中包括该ID,然后您可以在后端服务中使用它进行ES调用。

详细信息的官方网站-https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-scroll.html

答案 1 :(得分:0)

您可以更改设计以一次加载多页数据,然后返回前端,然后让前端处理分页。假设每个页面要显示10条记录,然后获取50条记录并返回到前端。如果用户在这5个页面之间滚动,则不会有后端请求。仅当用户请求下一个设置时,才使用滚动API跳过技术(我知道它可能仍然很慢)并获取下5页的数据。

5 pages in a go