- 浏览: 669978 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (364)
- quick start (57)
- bboss aop (43)
- bboss mvc (48)
- bboss persistent (96)
- bboss taglib (30)
- bboss event (10)
- bbossgroups (52)
- bboss (32)
- bboss会话共享 (17)
- bboss rpc (7)
- bboss 国际化 (5)
- bboss 序列化 (9)
- bboss cxf webservice (8)
- bboss hessian (3)
- bboss 安全认证SSO (15)
- bboss 工作流 (6)
- 平台 (18)
- bboss quartz (3)
- 杂谈 (5)
- 大数据 (1)
- bboss elastic (24)
- bboss http (1)
- bboss kafka (1)
- Elasticsearch Scroll和Slice Scroll查询API使用案例 (1)
最新评论
-
qianhao123:
...
采用gradle构建和发布bboss方法介绍 -
qianhao123:
[img][/img]
采用gradle构建和发布bboss方法介绍 -
yin_bp:
欢迎大家参与working
高性能elasticsearch ORM开发库使用介绍 -
qq641879434:
万分感谢
bboss 持久层sql xml配置文件编写和加载方法介绍 -
yin_bp:
qq641879434 写道怎么设置配置文件 可以查看执行的S ...
bboss 持久层sql xml配置文件编写和加载方法介绍
Elasticsearch Sliced Scroll分页检索案例分享
我们在文章《Elasticsearch Scroll分页检索案例分享》中介绍了elasticsearch scroll的基本用法,本文介绍Elasticsearch Sliced Scroll分页检索功能。
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
2.定义Sliced Scroll检索dsl
创建配置文件-在resources目录下定义文件scroll.xml
esmapper/scroll.xml
文件内容包含Sliced Scroll检索dsl语句-scrollSliceQuery
3.串行方式执行slice检索
4.并行方式执行slice检索
通过串行运行和并行运行结果比较,并行处理的性能要好很多,实际检索到的文档数量等价一致。
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html
6.开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号:
我们在文章《Elasticsearch Scroll分页检索案例分享》中介绍了elasticsearch scroll的基本用法,本文介绍Elasticsearch Sliced Scroll分页检索功能。
1.准备工作
参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端
2.定义Sliced Scroll检索dsl
创建配置文件-在resources目录下定义文件scroll.xml
esmapper/scroll.xml
文件内容包含Sliced Scroll检索dsl语句-scrollSliceQuery
<property name="scrollSliceQuery"> <![CDATA[ { "slice": { "id": $id, "max": $max }, "size":$size, "query": { "term" : { "gc.jvmGcOldCount" : 3 } } } ]]> </property>
3.串行方式执行slice检索
/** * 串行方式执行slice scroll操作 */ @Test public void testSliceScroll() { ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/scroll.xml"); List<String> scrollIds = new ArrayList<>(); long starttime = System.currentTimeMillis(); //scroll slice分页检索 int max = 6; long realTotalSize = 0; for (int i = 0; i < max; i++) { Map params = new HashMap(); params.put("id", i); params.put("max", max);//最多6个slice,不能大于share数 params.put("size", 100);//每页100条记录 ESDatas<Map> sliceResponse = clientUtil.searchList("agentstat-*/_search?scroll=1m", "scrollSliceQuery", params,Map.class); List<Map> sliceDatas = sliceResponse.getDatas(); realTotalSize = realTotalSize + sliceDatas.size(); long totalSize = sliceResponse.getTotalSize(); String scrollId = sliceResponse.getScrollId(); if (scrollId != null) scrollIds.add(scrollId); System.out.println("totalSize:" + totalSize); System.out.println("scrollId:" + scrollId); if (sliceDatas != null && sliceDatas.size() >= 100) {//每页100条记录,迭代scrollid,遍历scroll分页结果 do { sliceResponse = clientUtil.searchScroll("1m", scrollId, Map.class); String sliceScrollId = sliceResponse.getScrollId(); if (sliceScrollId != null) scrollIds.add(sliceScrollId); sliceDatas = sliceResponse.getDatas(); if (sliceDatas == null || sliceDatas.size() < 100) { break; } realTotalSize = realTotalSize + sliceDatas.size(); } while (true); } } //打印处理耗时和实际检索到的数据 long endtime = System.currentTimeMillis(); System.out.println("耗时:"+(endtime - starttime)+",realTotalSize:"+realTotalSize); //查询存在es服务器上的scroll上下文信息 String scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET); System.out.println(scrolls); //处理完毕后清除scroll上下文信息 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.并行方式执行slice检索
//用来存放实际slice检索总记录数 long realTotalSize ; //辅助方法,用来累计每次scroll获取到的记录数 synchronized void incrementSize(int size){ this.realTotalSize = this.realTotalSize + size; } /** * 并行方式执行slice scroll操作 */ @Test public void testParralSliceScroll() { final ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/scroll.xml"); final List<String> scrollIds = new ArrayList<>(); long starttime = System.currentTimeMillis(); //scroll slice分页检索 final int max = 6; final CountDownLatch countDownLatch = new CountDownLatch(max);//线程任务完成计数器,每个线程对应一个sclice,每运行完一个slice任务,countDownLatch计数减去1 for (int j = 0; j < max; j++) {//启动max个线程,并行处理每个slice任务 final int i = j; Thread sliceThread = new Thread(new Runnable() {//多线程并行执行scroll操作做,每个线程对应一个sclice @Override public void run() { Map params = new HashMap(); params.put("id", i); params.put("max", max);//最多6个slice,不能大于share数 params.put("size", 100);//每页100条记录 ESDatas<Map> sliceResponse = clientUtil.searchList("agentstat-*/_search?scroll=1m", "scrollSliceQuery", params,Map.class); List<Map> sliceDatas = sliceResponse.getDatas(); incrementSize( sliceDatas.size());//统计实际处理的文档数量 long totalSize = sliceResponse.getTotalSize(); String scrollId = sliceResponse.getScrollId(); if (scrollId != null) scrollIds.add(scrollId); System.out.println("totalSize:" + totalSize); System.out.println("scrollId:" + scrollId); if (sliceDatas != null && sliceDatas.size() >= 100) {//每页100条记录,迭代scrollid,遍历scroll分页结果 do { sliceResponse = clientUtil.searchScroll("1m", scrollId, Map.class); String sliceScrollId = sliceResponse.getScrollId(); if (sliceScrollId != null) scrollIds.add(sliceScrollId); sliceDatas = sliceResponse.getDatas(); if (sliceDatas == null || sliceDatas.size() < 100) { break; } incrementSize( sliceDatas.size());//统计实际处理的文档数量 } while (true); } countDownLatch.countDown();//slice检索完毕后计数器减1 } }); sliceThread.start();//启动线程 } try { countDownLatch.await();//等待所有的线程执行完毕,计数器变成0 } catch (InterruptedException e) { e.printStackTrace(); } //打印处理耗时和实际检索到的数据 long endtime = System.currentTimeMillis(); System.out.println("耗时:"+(endtime - starttime)+",realTotalSize:"+realTotalSize); //查询存在es服务器上的scroll上下文信息 String scrolls = clientUtil.executeHttp("_nodes/stats/indices/search", ClientUtil.HTTP_GET); // System.out.println(scrolls); //处理完毕后清除scroll上下文信息 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); }
通过串行运行和并行运行结果比较,并行处理的性能要好很多,实际检索到的文档数量等价一致。
5.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/search-request-scroll.html
6.开发交流
elasticsearch技术交流群:166471282
elasticsearch微信公众号:
发表评论
-
一组获取Elasticsearch 索引表所有文档API使用案例
2018-11-18 16:02 3012The best elasticsearch highle ... -
Elasticsearch Scroll和Slice Scroll查询API使用案例
2018-09-16 18:49 3835Elasticsearch Scroll和Slice Scro ... -
数据库数据导入Elasticsearch案例分享
2018-09-16 18:42 6259The best elasticsearch highleve ... -
Spring Boot整合ElasticSearch单/多集群案例
2018-07-07 20:12 9776Spring Boot整合ElasticSearch单个集群和 ... -
ElasticSearch DSL Script使用案例分享
2018-06-28 23:52 6178the best elasticsearch highleve ... -
Elasticsearch 6.3.0 SQL功能使用案例分享
2018-06-25 19:12 3276The best elasticsearch highleve ... -
数据库数据导入Elasticsearch案例分享
2018-06-21 22:56 433The best elasticsearch highleve ... -
ElasticSearch From-Size分页案例
2018-06-14 00:17 3383ElasticSearch From-Size分页案例 1. ... -
ElasticSearch客户端注解使用介绍
2018-05-30 00:19 2371The best elasticsearch highleve ... -
基于自定义配置文件初始化ElasticSearch客户端方法介绍
2018-05-24 18:56 1485基于自定义配置文件初始化ElasticSearch客户端方法介 ... -
Elasticsearch关键词高亮检索案例分享
2018-05-10 22:18 62211.准备工作 参考文档《集成Elasticsearch Res ... -
判断ElasticSearch索引Indice和索引类型是否存在
2018-05-05 23:54 8498The best elasticsearch highleve ... -
快速集成Elasticsearch Restful API案例
2018-04-26 14:27 3168The best elasticsearch highleve ... -
Elasticsearch source filter检索案例
2018-04-24 13:00 2221摘要: the best elasticsearch high ... -
Elasticsearch search after分页检索案例
2018-04-21 10:36 3056Elasticsearch search after分页检索案 ... -
Elasticsearch Delete/UpdateByQuery案例
2018-04-16 11:09 7323Elasticsearch Delete/UpdateByQu ... -
Elasticsearch返回父子数据关联查询案例
2018-04-13 12:36 4673在《Elasticsearch 父子关 ... -
Elasticsearch地理位置维护及检索案例分享
2018-03-31 21:36 1687Elasticsearch地理位置信息维护及检索案例分享 1 ... -
Elasticsearch Scroll分页检索案例分享
2018-03-28 20:40 4059Elasticsearch Scroll分页检索案例分享 1 ... -
Elasticsearch Mget、GetDocSource、索引部分更新案例分享
2018-03-25 08:55 12211.前期准备 参考文档《高性能elasticsearch OR ...
相关推荐
方法如果传总页数了,es就不用查询总页数,直接通过开始位置到结束位置取数即可
Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索
基于ElasticSearch的海量文本检索系统 基于ElasticSearch的海量文本检索系统,目前支持txt, doc, docx, pdf, ppt格式文本上传及全文查询,本项目作为本人的毕业设计
Spring Boot结合Jest实现对ElasticSearch的全文检索,分词检索,分页,搜索结果高亮关键词,多字段检索 PageController中的搜索方法里面是全套的,分词,分页,高亮等都包含,数据格式个es-head中创建索引的索引在...
本科毕业设计+优秀课程设计+大作业+基于Springboot+ElasticSearch构建的博客检索系统(源码+说明设计文档) 本科毕业设计+优秀课程设计+大作业+基于Springboot+ElasticSearch构建的博客检索系统(源码+说明设计文档...
Java API整合ES实现深分页,高亮等操作
java 集成elasticsearch分页查询,不用更改elasticsearch配置支持分页查询并且全数据查询出来
针对elasticsearch的一些研究,我选用的版本是6.12 ,内容包括客户端创建,Mapping分词创建(我这里用的是IK6.12版本),索引创建,条件检索,等,研究中发现,elasticsearch插件必须配套,选用一个版本,如果不同...
es深度分页: 主要讨论了es的几种分页机制: 1、分页概述 2、浅分页 3、scroll深分页 4、search_after分页
十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...
ElasticSearch分享ppt40页+.pptx 适用于java学习者 作为技术分享也可
Elasticsearch滚动流 Elasticsearch Scroll查询结果作为Node.js可读流。 此模块可与官方Elasticsearch Node.js客户端一起使用: (新的Elasticsearch js API) (旧的Elasticsearch js API)原料药...
好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个开源的高拓展的分布式全文搜索引擎它可以近乎实时的存储、检索数据;本身拓展性很好,可以拓展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用...
聚合查询分页测试termsAgg.size(2147483647); //指定最大统计显示多少行步骤1:全量聚合,size设置为: 2147483647。 ES5.X/6.X版本设置为2147483647 ,它等于2^31-1,请看该地方代码
java连接elasticsearch实现全文检索,并且高亮显示结果,实现分页。项目基于elasticsearch5.6.1可根据自己实际情况调整版本。最近项目需要所以学习了一下,项目很简单可以根据你的实际情况更改接口。我本地的搜索是...
Elasticsearch全文检索,springboot整合ES,包括创建索引,根据id查询,关键字查询,删除索引等基本操作。
es 提供了3种方式来解决分页与遍历的问题: – from/size – scroll – search_afterForm/Size 最常见的分页方案 – from指明开始位置 – size 指明获取总数 scroll 遍历文档集的 api,以快照的方式来避免深度分页的...
es查询类封装
ElasticSearch和activiti案例ElasticSearch和activiti案例ElasticSearch和activiti案例ElasticSearch和activiti案例