当前位置: 首页 > news >正文

Java ES 滚动查询

滚动查询(Scroll Query)是 Elasticsearch 提供的一种机制,用于处理大量数据的查询。它允许你在多个请求之间保持“游标”,以便在后续请求中获取更多的结果。

以下是滚动查询的基本工作原理:

1 初始查询:
客户端发送一个查询请求给 Elasticsearch,并指定一个滚动时间(scroll time)。

2 首次返回结果:
Elasticsearch会处理这个查询请求,并将结果返回给客户端。
除了返回查询结果之外,还会返回一个特殊的“滚动ID”(scroll ID)。

3 保持连接:
客户端将这个滚动ID保存下来,以便在后续请求中使用。

4 后续查询:
在滚动时间内,客户端可以使用保存的滚动ID来获取更多的结果,而不需要重新发送完整的查询请求。
客户端发送一个滚动请求,并提供之前收到的滚动ID。

5 返回后续结果:
Elasticsearch会使用之前的滚动ID来获取接下来的结果,并将其返回给客户端。
如果有更多的结果可用,它也会返回一个新的滚动ID,以便在下一次请求中使用。

6 重复步骤4和步骤5:
客户端可以在滚动时间内多次使用滚动ID来获取更多的结果,直到没有更多的结果可用为止。

7 滚动ID的失效:
一旦滚动时间过期(在初始查询时指定的时间),或者客户端主动关闭滚动查询,相应的滚动ID将失效,不再能用于获取结果。
滚动查询的优点在于,它允许你在多个请求之间保持连接状态,从而能够处理大量数据而不会因为单次请求的数据量过大而出现问题。

需要注意的是,滚动查询并不适用于实时查询,因为它会保持资源开销,直到滚动时间过期或者显式关闭滚动查询为止。因此,滚动查询通常用于离线批量处理或需要处理大量数据的情况。

@Test
public void searchScroll() {long gte = 0;long lt = 100000000;BoolQueryBuilder query = new BoolQueryBuilder();query.must(QueryBuilders.rangeQuery("createTime").gte(gte).lt(lt));NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();builder.withPageable(PageRequest.of(0, 500)); // 每次只处理500条数据builder.withQuery(query);// 查询IndexCoordinates index = "student";SearchScrollHits<Student> hits = template.searchScrollStart(60000L,builder.build(),Student.class,index);String scrollId = hits.getScrollId();List<String> scrollIdList = new LinkedList<>();scrollIdList.add(scrollId);List<CheckItemCount> list = new LinkedList<>();while (hits.hasSearchHits()) {// 处理数据List<SearchHit<Student>> hitList = hits.getSearchHits();for (SearchHit<Student> hit : hitList) {// 处理数据}// 滚动查询下一页hits = template.searchScrollContinue(scrollId, 60000L, Student.class, index);scrollId = hits.getScrollId();scrollIdList.add(scrollId);}// 清空滚动查询template.searchScrollClear(scrollIdList);
}
http://www.lryc.cn/news/184267.html

相关文章:

  • 机器学习算法基础--KNN算法分类
  • 深入探究 C++ 编程中的资源泄漏问题
  • BLE协议栈1-物理层PHY
  • 光伏储能直流系统MATLAB仿真(PV光伏阵列+Boost DCDC变换器+负载+双向DCDC变换器+锂离子电池系统)
  • C++三大特性——继承(上篇)
  • docker系列(9) - docker-compose
  • Vue中如何进行日历展示与操作
  • SpringBoot 返回图片、Excel、音视频等流数据几种处理方式
  • 【Vue面试题一】、说说你对 Vue 的理解
  • vue3 axios
  • 划片机:半导体生产的必备设备
  • 电路维修——双端队列BFS
  • 乌班图22.04 kubeadm简单搭建k8s集群
  • vue3富文本编辑器的二次封装开发-Tinymce
  • typescript 类型声明文件
  • Hadoop伪分布式环境搭建
  • javaee ssm框架项目添加分页控件
  • 2023年中国非晶纳米晶竞争格局、产业链及行业产量分析[图]
  • 在业务开发中遇到的树形结构(部门、区域、职位),递归处理。
  • 张量-算术操作函数
  • 虚拟展厅有什么重要意义,了解虚拟展厅在宣传中的应用
  • 华为OD机试真题-补种未成活胡杨(Java/C++/Go/Python)
  • Java卷上天,可以转行干什么?
  • Pyside6 安装和简单界面开发
  • python读取vivo手机截图,将满屏图片文件移动别的路径
  • 【一周安全资讯1007】多项信息安全国家标准10月1日起实施;GitLab发布紧急安全补丁修复高危漏洞
  • 2023年09月个人工作生活总结
  • 现货白银图表分析的依据
  • python多线程与多进程
  • 62从零开始学Java之时间相关的类都有哪些?