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
分享到:
相关推荐
ES 深度分页是 Elasticsearch 中的一种分页机制,主要有四种:浅分页、scroll 深分页、search_after 分页和deep pagination。下面将对每种机制进行详细的介绍和分析。 1. 分页概述 ES 中的分页顾名思义,即让我们...
在IT行业中,尤其是在大数据处理和搜索引擎领域,Elasticsearch(简称ES)是一个极其重要的工具。它是一个基于Lucene的开源全文搜索引擎,具有分布式、实时、高可扩展性以及灵活的数据模型等特点。PHP作为广泛使用的...
本压缩包文件"Java API整合ES实现深分页,高亮等操作.zip"可能包含了一个Java应用程序,该程序展示了如何使用Java API来实现Elasticsearch的高级功能,如深度分页和高亮显示。深度分页是指在大数据量下,能够有效地...
总的来说,"基于.netcore搜索封装ElasticSearch.zip"提供的库将帮助.NET Core开发者更好地利用Elasticsearch的强大搜索和分析能力,提高应用程序的检索效率和数据处理能力。通过深入理解和熟练使用这个库,开发者...
分页功能是Elasticsearch查询中常用的一种特性,它允许用户以指定的大小(如每页10条记录)获取结果。这通常通过设置from和size参数来实现,或者使用SearchRequest的scroll方法配合Scroll API进行大结果集的分批处理...
- 集成Spring Data Elasticsearch的Scroll和SearchAfter功能,实现分页查询 - 使用`@Async`进行异步操作,提高性能 通过以上步骤和高级特性,你可以有效地将SpringBoot应用与Elasticsearch整合,实现高效的数据管理...
总结,Elasticsearch深度分页的问题主要由其分布式和分片的特性导致,可以通过限制分页数、调整设置或使用Scroll API等方法来应对。开发者应当根据实际业务场景选择合适的策略,平衡性能与功能的需求。
本篇文章将详细讲解如何使用Java API,特别是TransportClient,来检索Elasticsearch中的数据,以及如何实现数据的导入导出和统计。 1. **Elasticsearch简介** Elasticsearch是基于Lucene构建的开源全文搜索引擎,...
Elasticsearch是一个强大的开源搜索引擎,广泛应用于大数据分析和实时数据检索。它采用了分布式、RESTful方式工作,并且具有高可用性和可扩展性。在实际开发中,为了方便操作Elasticsearch,开发者通常会封装一些...
3. **滚动查询(Scroll)**: 分页遍历大量数据,适用于大数据量的全量检索。 4. **搜索_after**:滚动查询的优化版,基于上一次查询的结果继续获取下一批数据。 5. **多搜索(Multi Search)**: 在一个请求中同时执行多...
Elasticsearch (ES) 是一个基于 Lucene 的分布式搜索引擎,广泛应用于日志分析、全文检索、实时数据分析等场景。在开发过程中遵循一定的规范可以确保系统的高效稳定运行,防止潜在问题的发生。 1. ES 适用场景 - ...
在IT行业中,尤其是在大数据检索和分析领域,Elasticsearch(ES)是一个非常重要的工具。它是一个基于Lucene的分布式、RESTful风格的搜索和数据分析引擎,能够提供实时、高可扩展性的全文检索服务。本节将详细讲解...
Elasticsearch(ES)是一款流行的开源全文搜索引擎,被广泛应用于日志分析、实时数据分析和复杂搜索场景。本教程将聚焦于Elasticsearch 5.x版本,并探讨如何通过Java API来实现搜索功能。 1. **Elasticsearch概述**...
SpringBoot整合Elasticsearch是现代Java开发中常见的一项任务,因为Elasticsearch作为一个高性能的搜索引擎,广泛用于数据的快速检索和分析。以下是对这个压缩包文件中涉及的关键知识点的详细说明: 1. **增删改查...
Elasticsearch 是一个流行的开源全文搜索引擎,广泛应用于数据检索、分析和实时数据存储。Java API 提供了与 Elasticsearch 服务器进行交互的接口,使得 Java 开发者能够方便地在应用程序中集成和操作 Elasticsearch...
Elasticsearch-JDBC是一款强大的工具,它允许我们将关系型数据库中的数据实时或定期同步到Elasticsearch中,以便进行高效的数据检索和分析。这个工具基于JDBC(Java Database Connectivity),可以连接各种支持JDBC...
首先,从给定文件的内容来看,该文件主要是对ElasticSearch(简称ES)这一全文搜索和分析引擎的详细介绍和使用指导。文件中不仅介绍了ES的基本概念,如ES的产生、与Solr的对比、倒排索引的概念等,还涉及到ES的安装...
Elasticsearch(ES)是一款开源的全文搜索引擎,以其高效、可扩展和易用性闻名。本教程的源码"elasticsearch_demo.zip"是针对Elasticsearch的进阶学习提供的实践项目,旨在帮助开发者深入理解其核心概念和高级特性。...
例如,Solr支持`start`和`rows`参数来实现分页,Elasticsearch则有`from`和`size`参数,同时提供了更丰富的分页策略,如`scroll` API。 总结来说,理解和掌握Lucene5中的分页查询对于进行高效全文检索开发至关重要...