Elasticsearch Scroll分页检索案例分享
1.准备工作
参考文档《 高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端bboss
2.定义scroll检索dsl
首先定义一个简单的scroll dsl检索脚本
<properties> <property name="scrollQuery"> <![CDATA[ { ## 这里都是用常量在操作,实际场景中可以参数化变量 "size":1000, "query": { "term" : { "gc.jvmGcOldCount" : 3 ##参数值可以定义为变量,通过参数传递进来 } } } ]]> </property> </properties>
3.Scroll检索代码
@Test public void testScroll(){ ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/scroll.xml"); //scroll分页检索,将检索结果映射为Map对象,也可以映射为自定义的实体对象 ESDatas<Map> response = clientUtil.searchList("agentstat-*/_search?scroll=1m", "scrollQuery",//对于dsl脚本名称,在esmapper/scroll.xml文件中配置 Map.class); List<Map> datas = response.getDatas();//第一页数据 List<String > scrollIds = new ArrayList<>();//用于记录每次scroll的scrollid,便于检索完毕后清除 long totalSize = response.getTotalSize();//总记录数 String scrollId = response.getScrollId(); if(scrollId != null) scrollIds.add(scrollId); System.out.println("totalSize:"+totalSize); System.out.println("scrollId:"+scrollId); if(datas != null && datas.size() > 0) {//每页1000条记录,通过迭代scrollid,遍历scroll分页结果 do { response = clientUtil.searchScroll("1m",scrollId,Map.class); scrollId = response.getScrollId();//每页的scrollid if(scrollId != null) scrollIds.add(scrollId); datas = response.getDatas();//每页的纪录数 if(datas == null || datas.size() == 0){ break; } } while (true); } //查询并打印存在于es服务器上的scroll上下文信息 String scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET); System.out.println(scrolls); //清除scroll上下文信息,虽然说超过1分钟后,scrollid会自动失效,但是手动删除不用的scrollid,释放es资源是一个好习惯 if(scrollIds.size() > 0) { scrolls = clientUtil.deleteScrolls(scrollIds); System.out.println(scrolls); } //清理完毕后查看scroll上下文信息 scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET); System.out.println(scrolls); }
4.Scroll案例项目地址和代码文件
项目地址:
https://gitee.com/bboss/elasticsearchdemo/
scroll检索对应的代码和脚本文件:
https://gitee.com/bboss/elasticsearchdemo/blob/master/src/test/resources/esmapper/scroll.xml
https://gitee.com/bboss/elasticsearchdemo/blob/master/src/test/java/org/frameworkset/elasticsearch/TestScrollQuery.java
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Hive实现分组排序或者分页
使用到的语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)实例: 初始化数据: create table employee (empid int ,deptid int ,salary decimal(10,2)); insert into employee values(1,10,5500.00); insert into employee values(2,10,4500.00); insert into employee values(3,20,1900.00); insert into employee values(4,20,4800.00); insert into employ...
- 下一篇
Hadoop框架
1、Hadoop的整体框架 Hadoop由HDFS、MapReduce、HBase、Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的文件系统HDFS(Hadoop Distributed File System)来执行MapReduce程序的MapReduce引擎。 (1)Pig是一个基于Hadoop的大规模数据分析平台,Pig为复杂的海量数据并行计算提供了一个简单的操作和编程接口; (2)Hive是基于Hadoop的一个工具,提供完整的SQL查询,可以将sql语句转换为MapReduce任务进行运行; (3)ZooKeeper:高效的,可拓展的协调系统,存储和协调关键共享状态; (4)HBase是一个开源的,基于列存储模型的分布式数据库; (5)HDFS是一个分布式文件系统,有着高容错性的特点,适合那些超大数据集的应用程序; (6)MapReduce是一种编程模型,用于大规模数据集(大于1TB)的并行运算。 下图是一个典型的Hadoop集群的部署结构: 接着给出Hadoop各组件依赖共存关系: 2、Hadoop的核心设计 (1)HDF...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7安装Docker,走上虚拟化容器引擎之路