`

Elasticsearch Scroll分页检索案例分享

阅读更多
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
1
0
分享到:
评论

相关推荐

    ES深度分页.docx

    ES 深度分页是 Elasticsearch 中的一种分页机制,主要有四种:浅分页、scroll 深分页、search_after 分页和deep pagination。下面将对每种机制进行详细的介绍和分析。 1. 分页概述 ES 中的分页顾名思义,即让我们...

    PHP中 对es中的数据分页 查询

    在IT行业中,尤其是在大数据处理和搜索引擎领域,Elasticsearch(简称ES)是一个极其重要的工具。它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的...

    Java API整合ES实现深分页,高亮等操作.zip

    本压缩包文件"Java API整合ES实现深分页,高亮等操作.zip"可能包含了一个Java应用程序,该程序展示了如何使用Java API来实现Elasticsearch的高级功能,如深度分页和高亮显示。深度分页是指在大数据量下,能够有效地...

    基于.netcore搜索封装ElasticSearch.zip

    总的来说,"基于.netcore搜索封装ElasticSearch.zip"提供的库将帮助.NET Core开发者更好地利用Elasticsearch的强大搜索和分析能力,提高应用程序的检索效率和数据处理能力。通过深入理解和熟练使用这个库,开发者...

    Elasticsearch工具类

    分页功能是Elasticsearch查询中常用的一种特性,它允许用户以指定的大小(如每页10条记录)获取结果。这通常通过设置from和size参数来实现,或者使用SearchRequest的scroll方法配合Scroll API进行大结果集的分批处理...

    springboot整合es-springboot-elasticsearch.zip

    - 集成Spring Data Elasticsearch的Scroll和SearchAfter功能,实现分页查询 - 使用`@Async`进行异步操作,提高性能 通过以上步骤和高级特性,你可以有效地将SpringBoot应用与Elasticsearch整合,实现高效的数据管理...

    Java架构直通车——ElasticSearch深度分页解决方案

    总结,Elasticsearch深度分页的问题主要由其分布式和分片的特性导致,可以通过限制分页数、调整设置或使用Scroll API等方法来应对。开发者应当根据实际业务场景选择合适的策略,平衡性能与功能的需求。

    java api 检索elasticsearch数据

    本篇文章将详细讲解如何使用Java API,特别是TransportClient,来检索Elasticsearch中的数据,以及如何实现数据的导入导出和统计。 1. **Elasticsearch简介** Elasticsearch是基于Lucene构建的开源全文搜索引擎,...

    Elasticsearch使用工具类

    Elasticsearch是一个强大的开源搜索引擎,广泛应用于大数据分析和实时数据检索。它采用了分布式、RESTful方式工作,并且具有高可用性和可扩展性。在实际开发中,为了方便操作Elasticsearch,开发者通常会封装一些...

    基于Elasticsearch Java API的参考手册

    3. **滚动查询(Scroll)**: 分页遍历大量数据,适用于大数据量的全量检索。 4. **搜索_after**:滚动查询的优化版,基于上一次查询的结果继续获取下一批数据。 5. **多搜索(Multi Search)**: 在一个请求中同时执行多...

    000057_ElasticSearch开发规范.docx

    Elasticsearch (ES) 是一个基于 Lucene 的分布式搜索引擎,广泛应用于日志分析、全文检索、实时数据分析等场景。在开发过程中遵循一定的规范可以确保系统的高效稳定运行,防止潜在问题的发生。 1. ES 适用场景 - ...

    scrollDemo

    在IT行业中,尤其是在大数据检索和分析领域,Elasticsearch(ES)是一个非常重要的工具。它是一个基于Lucene的分布式、RESTful风格的搜索和数据分析引擎,能够提供实时、高可扩展性的全文检索服务。本节将详细讲解...

    elasticsearch5.x的java实现搜索

    Elasticsearch(ES)是一款流行的开源全文搜索引擎,被广泛应用于日志分析、实时数据分析和复杂搜索场景。本教程将聚焦于Elasticsearch 5.x版本,并探讨如何通过Java API来实现搜索功能。 1. **Elasticsearch概述**...

    springboot整合elasticsearch完整代码

    SpringBoot整合Elasticsearch是现代Java开发中常见的一项任务,因为Elasticsearch作为一个高性能的搜索引擎,广泛用于数据的快速检索和分析。以下是对这个压缩包文件中涉及的关键知识点的详细说明: 1. **增删改查...

    Elasticsearch5.x Java API手册

    Elasticsearch 是一个流行的开源全文搜索引擎,广泛应用于数据检索、分析和实时数据存储。Java API 提供了与 Elasticsearch 服务器进行交互的接口,使得 Java 开发者能够方便地在应用程序中集成和操作 Elasticsearch...

    ElasticSearch.pdf

    首先,从给定文件的内容来看,该文件主要是对ElasticSearch(简称ES)这一全文搜索和分析引擎的详细介绍和使用指导。文件中不仅介绍了ES的基本概念,如ES的产生、与Solr的对比、倒排索引的概念等,还涉及到ES的安装...

    elasticsearch_demo.zip

    Elasticsearch(ES)是一款开源的全文搜索引擎,以其高效、可扩展和易用性闻名。本教程的源码"elasticsearch_demo.zip"是针对Elasticsearch的进阶学习提供的实践项目,旨在帮助开发者深入理解其核心概念和高级特性。...

    Lucene5学习之分页查询

    例如,Solr支持`start`和`rows`参数来实现分页,Elasticsearch则有`from`和`size`参数,同时提供了更丰富的分页策略,如`scroll` API。 总结来说,理解和掌握Lucene5中的分页查询对于进行高效全文检索开发至关重要...

    elasticsearch-jdbc 同步工具下载及配置说明

    Elasticsearch-JDBC是一款强大的工具,它允许我们将关系型数据库中的数据实时或定期同步到Elasticsearch中,以便进行高效的数据检索和分析。这个工具基于JDBC(Java Database Connectivity),可以连接各种支持JDBC...

Global site tag (gtag.js) - Google Analytics