Elasticsearch Scroll分页检索案例分享

Elasticsearch Scroll分页检索案例分享

1.准备工作

参考文档《》导入和配置es客户端bboss

2.定义scroll检索dsl

3.Scroll检索代码

  1. public void testScroll(){
  2. ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/scroll.xml");
  3. //scroll分页检索,将检索结果映射为Map对象,也可以映射为自定义的实体对象
  4. ESDatas<Map> response = clientUtil.searchList("agentstat-*/_search?scroll=1m",
  5. "scrollQuery",//对于dsl脚本名称,在esmapper/scroll.xml文件中配置
  6. Map.class);
  7. List<Map> datas = response.getDatas();//第一页数据
  8. List<String > scrollIds = new ArrayList<>();//用于记录每次scroll的scrollid,便于检索完毕后清除
  9. long totalSize = response.getTotalSize();//总记录数
  10. if(scrollId != null)
  11. scrollIds.add(scrollId);
  12. System.out.println("scrollId:"+scrollId);
  13. if(datas != null && datas.size() > 0) {//每页1000条记录,通过迭代scrollid,遍历scroll分页结果
  14. do {
  15. response = clientUtil.searchScroll("1m",scrollId,Map.class);
  16. scrollId = response.getScrollId();//每页的scrollid
  17. if(scrollId != null)
  18. scrollIds.add(scrollId);
  19. datas = response.getDatas();//每页的纪录数
  20. if(datas == null || datas.size() == 0){
  21. break;
  22. }
  23. //查询并打印存在于es服务器上的scroll上下文信息
  24. String scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET);
  25. System.out.println(scrolls);
  26. //清除scroll上下文信息,虽然说超过1分钟后,scrollid会自动失效,
  27. //但是手动删除不用的scrollid,是一个好习惯
  28. if(scrollIds.size() > 0) {
  29. scrolls = clientUtil.deleteScrolls(scrollIds);
  30. System.out.println(scrolls);
  31. }
  32. //清理完毕后查看scroll上下文信息
  33. scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET);

4.Scroll案例项目地址和代码文件

项目地址:

https://gitee.com/bboss/elasticsearchdemo/blob/master/src/test/resources/esmapper/scroll.xml