文档章节

Elasticsearch Scroll分页检索案例分享

bboss
 bboss
发布于 2018/03/28 20:41
字数 467
阅读 819
收藏 0

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();//第一次的scrollid
		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,是一个好习惯
		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

© 著作权归作者所有

共有 人打赏支持
bboss

bboss

粉丝 110
博文 60
码字总数 68205
作品 8
长沙
程序员
私信 提问
bboss elasticsearch v5.0.6.0 发布

bboss elasticsearch v5.0.6.0 发布 bboss elasticsearch是一款高性能的elasticsearch orm java客户端框架,具备以下主要特性: 简单易用:基于xml配置和管理dsl,在dsl脚本中可以使用变量、...

bboss
2018/04/20
975
2
让 Elasticsearch 飞起来!——性能优化实践干货

0、题记 Elasticsearch性能优化的最终目的:用户体验。 关于爽的定义——著名产品人梁宁曾经说过“人在满足时候的状态叫做愉悦,人不被满足就会难受,就会开始寻求。如果这个人在寻求中,能立...

01/01
0
0
Elasticsearch——分页查询From&Size VS scroll

Elasticsearch中数据都存储在分片中,当执行搜索时每个分片独立搜索后,数据再经过整合返回。那么,如果要实现分页查询该怎么办呢? 更多内容参考Elasticsearch资料汇总 按照一般的查询流程来...

xiaomin0322
2018/06/13
0
0
Elasticsearch Rest Client bboss v5.0.9.5 发布

The best Elasticsearch Highlevel Rest Client API-----bboss v5.0.9.5 发布。 主要功能特色 ElasticSearch兼容性:2.x,5.x,6.x,+ JDK兼容性: jdk 1.6+ Spring boot兼容性:1.x,2.x ORM和DSL......

bboss
2018/09/05
948
1
ES(elasticsearch)搜索引擎

ES(elasticsearch)搜索引擎 0、授人以渔,少走半年弯路! 死磕 Elasticsearch 方法论:普通程序员高效精进的 10 大狠招! 一、Elasitcsearch基础篇 1.1 Elasitcsearch基础认知 1、Elasticse...

Ocean_K
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

filebeat multiline配置(转)

使用filebeat5.0.1版本,用filebeat作为日志收集工具时: java日志格式需要多行匹配,在filebeat配置文件中添加: ### Multiline options # Mutiline can be used for log messages spanning...

xiaomin0322
25分钟前
1
0
ConstraintLayout的基本使用

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="ht......

SuShine
29分钟前
1
0
ActiveMQ多个消费者消费不均匀问题

如果客户端处理很慢的话,Broker会在之前发送消息的反馈之前,继续发送新的消息到客户端。如果客户端依旧很慢的话,没有得到确认反馈的消息会持续增长。在这种情况下,Broker有可能会停止发送...

编程SHA
30分钟前
1
0
【机器学习PAI实战】—— 玩转人工智能之综述

模型训练与在线预测服务、推荐算法四部曲、机器学习PAI实战、更多精彩,尽在开发者分会场 【机器学习PAI实战】—— 玩转人工智能之商品价格预测 【机器学习PAI实战】—— 玩转人工智能之你最...

阿里云云栖社区
34分钟前
1
0
根据国务院2019年劳动节假期安排五一放假四天 免费节假日api第一时间调整

根据国务院发布http://www.gov.cn/zhengce/content/2019-03/22/content_5375877.htm 以下为原文 国务院办公厅关于调整 2019年劳动节假期安排的通知 国办发明电〔2019〕3号 各省、自治区、直辖...

xiaogg
38分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部