- 浏览: 695345 次
- 性别:
- 来自: 长沙
文章分类
- 全部博客 (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 3156The best elasticsearch highle ... -
Elasticsearch Scroll和Slice Scroll查询API使用案例
2018-09-16 18:49 3981Elasticsearch Scroll和Slice Scro ... -
数据库数据导入Elasticsearch案例分享
2018-09-16 18:42 6395The best elasticsearch highleve ... -
Spring Boot整合ElasticSearch单/多集群案例
2018-07-07 20:12 9956Spring Boot整合ElasticSearch单个集群和 ... -
ElasticSearch DSL Script使用案例分享
2018-06-28 23:52 6323the best elasticsearch highleve ... -
Elasticsearch 6.3.0 SQL功能使用案例分享
2018-06-25 19:12 3395The best elasticsearch highleve ... -
数据库数据导入Elasticsearch案例分享
2018-06-21 22:56 433The best elasticsearch highleve ... -
ElasticSearch From-Size分页案例
2018-06-14 00:17 3498ElasticSearch From-Size分页案例 1. ... -
ElasticSearch客户端注解使用介绍
2018-05-30 00:19 2524The best elasticsearch highleve ... -
基于自定义配置文件初始化ElasticSearch客户端方法介绍
2018-05-24 18:56 1574基于自定义配置文件初始化ElasticSearch客户端方法介 ... -
Elasticsearch关键词高亮检索案例分享
2018-05-10 22:18 62871.准备工作 参考文档《集成Elasticsearch Res ... -
判断ElasticSearch索引Indice和索引类型是否存在
2018-05-05 23:54 8604The best elasticsearch highleve ... -
快速集成Elasticsearch Restful API案例
2018-04-26 14:27 3250The best elasticsearch highleve ... -
Elasticsearch source filter检索案例
2018-04-24 13:00 2340摘要: the best elasticsearch high ... -
Elasticsearch search after分页检索案例
2018-04-21 10:36 3193Elasticsearch search after分页检索案 ... -
Elasticsearch Delete/UpdateByQuery案例
2018-04-16 11:09 7486Elasticsearch Delete/UpdateByQu ... -
Elasticsearch返回父子数据关联查询案例
2018-04-13 12:36 4801在《Elasticsearch 父子关 ... -
Elasticsearch地理位置维护及检索案例分享
2018-03-31 21:36 1742Elasticsearch地理位置信息维护及检索案例分享 1 ... -
Elasticsearch Scroll分页检索案例分享
2018-03-28 20:40 4138Elasticsearch Scroll分页检索案例分享 1 ... -
Elasticsearch Mget、GetDocSource、索引部分更新案例分享
2018-03-25 08:55 12841.前期准备 参考文档《高性能elasticsearch OR ...
相关推荐
方法如果传总页数了,es就不用查询总页数,直接通过开始位置到结束位置取数即可
ES 深度分页是 Elasticsearch 中的一种分页机制,主要有四种:浅分页、scroll 深分页、search_after 分页和deep pagination。下面将对每种机制进行详细的介绍和分析。 1. 分页概述 ES 中的分页顾名思义,即让我们...
本压缩包文件"Java API整合ES实现深分页,高亮等操作.zip"可能包含了一个Java应用程序,该程序展示了如何使用Java API来实现Elasticsearch的高级功能,如深度分页和高亮显示。深度分页是指在大数据量下,能够有效地...
Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索
在IT行业中,尤其是在大数据处理和搜索引擎领域,Elasticsearch(简称ES)是一个极其重要的工具。它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的...
基于ElasticSearch的海量文本检索系统 基于ElasticSearch的海量文本检索系统,目前支持txt, doc, docx, pdf, ppt格式文本上传及全文查询,本项目作为本人的毕业设计
基于Springboot+ElasticSearch的海量文本检索系统源码+全部资料+详细文档(高分毕业设计).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过...
Spring Boot结合Jest实现对ElasticSearch的全文检索,分词检索,分页,搜索结果高亮关键词,多字段检索 PageController中的搜索方法里面是全套的,分词,分页,高亮等都包含,数据格式个es-head中创建索引的索引在...
本科毕业设计+优秀课程设计+大作业+基于Springboot+ElasticSearch构建的博客检索系统(源码+说明设计文档) 本科毕业设计+优秀课程设计+大作业+基于Springboot+ElasticSearch构建的博客检索系统(源码+说明设计文档...
在` ESDemo `项目中,你可以找到上述操作的具体实现代码,这将帮助你更深入地理解如何在Spring Boot应用中整合和使用Elasticsearch进行全文检索。通过学习和实践,你将能够熟练地运用Elasticsearch来解决大数据的...
总的来说,ElasticSearch因其强大的搜索和分析能力、分布式特性及广泛的集成支持,成为Java学习者和技术分享者的重要工具。它不仅适用于日志分析、实时搜索,还广泛应用于监控、物联网、内容管理系统等多个领域。...
Elasticsearch是一款高性能的开源搜索引擎,特别适合进行全文检索。它基于Lucene库,但提供了更高级别的API和集群管理功能。在博客系统中,Elasticsearch可以存储和索引博客文章内容,以便快速地进行关键词搜索。 ...
**Elasticsearch官方提供数据案例account.json** Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎,它允许用户快速地存储、搜索和分析大量数据。在这个案例中,"account.json"是Elasticsearch官方提供的一...
### Elasticsearch 5 控制全文检索结果的精确度 在Elasticsearch中,为了提升全文检索的质量,用户常常需要对检索结果的精确度进行控制。本文将详细介绍如何通过不同的查询方式来实现这一目标。 #### 一、增加标题...
java连接elasticsearch实现全文检索,并且高亮显示结果,实现分页。项目基于elasticsearch5.6.1可根据自己实际情况调整版本。最近项目需要所以学习了一下,项目很简单可以根据你的实际情况更改接口。我本地的搜索是...
在`es服务配置非数据性结构.txt`中,可能包含了Elasticsearch集群的配置细节,如节点设置、索引模板、映射配置等。而`sprintboot-elasticsearch`可能是Spring Boot项目中的相关代码示例,包含了上述步骤的实现。 总...
java 集成elasticsearch分页查询,不用更改elasticsearch配置支持分页查询并且全数据查询出来
针对elasticsearch的一些研究,我选用的版本是6.12 ,内容包括客户端创建,Mapping分词创建(我这里用的是IK6.12版本),索引创建,条件检索,等,研究中发现,elasticsearch插件必须配套,选用一个版本,如果不同...
在这个名为“人工智能-项目实践-检索引擎-基于Java8的SSM+Elasticsearch全文检索的个人博客系统”的项目中,开发者构建了一个集成了人工智能技术的个人博客系统,它利用了现代搜索引擎技术,特别是Elasticsearch,来...
在实际应用中,用户输入的检索词往往可能存在拼写错误、不完整或者使用了同义词等情况,为了提高用户体验和搜索准确性,Elasticsearch 提供了多种功能来支持检索词的自动补全、自动纠错、拼音补全以及繁简转换。...