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就不用查询总页数,直接通过开始位置到结束位置取数即可
Spring Boot结合Jest实现对ElasticSearch的全文检索,分词检索,分页,搜索结果高亮关键词,多字段检索 PageController中的搜索方法里面是全套的,分词,分页,高亮等都包含,数据格式个es-head中创建索引的索引在...
es深度分页: 主要讨论了es的几种分页机制: 1、分页概述 2、浅分页 3、scroll深分页 4、search_after分页
Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索Elasticsearch in Action 全文检索
十分钟学会使用 Elasticsearch 优雅搭建自己的搜索系统。 什么是elasticsearch Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索...
使用ElasticSearch实现全文检索是一种常见且高效的方式。下面是详细的技术实践和说明: 安装和配置ElasticSearch: 首先,需要在服务器上安装ElasticSearch,并确保其正常运行。 然后,进行相关配置,如集群名称、...
es 提供了3种方式来解决分页与遍历的问题: – from/size – scroll – search_afterForm/Size 最常见的分页方案 – from指明开始位置 – size 指明获取总数 scroll 遍历文档集的 api,以快照的方式来避免深度分页的...
Elasticsearch滚动流 Elasticsearch Scroll查询结果作为Node.js可读流。 此模块可与官方Elasticsearch Node.js客户端一起使用: (新的Elasticsearch js API) (旧的Elasticsearch js API)原料药...
java 集成elasticsearch分页查询,不用更改elasticsearch配置支持分页查询并且全数据查询出来
ElasticSearch分享ppt40页+.pptx 适用于java学习者 作为技术分享也可
Elasticsearch全文检索,springboot整合ES,包括创建索引,根据id查询,关键字查询,删除索引等基本操作。
ElasticSearch_大数据检索介绍,单位的培训资料,分享给大家
es查询类封装
ElasticSearch和activiti案例ElasticSearch和activiti案例ElasticSearch和activiti案例ElasticSearch和activiti案例
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索...
java连接elasticsearch实现全文检索,并且高亮显示结果,实现分页。项目基于elasticsearch5.6.1可根据自己实际情况调整版本。最近项目需要所以学习了一下,项目很简单可以根据你的实际情况更改接口。我本地的搜索是...
Springboot + ElasticSearch 构建博客检索系统 简易博客检索系统使用前后端分离,前端使用 Vue ,后端使用 SpringBoot 数据库 MySQL 检索使用 ElasticSearch 同步数据使用 logstash
基于ElasticSearch的海量文本检索系统 基于ElasticSearch的海量文本检索系统,目前支持txt, doc, docx, pdf, ppt格式文本上传及全文查询,本项目作为本人的毕业设计
好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个开源的高拓展的分布式全文搜索引擎它可以近乎实时的存储、检索数据;本身拓展性很好,可以拓展到上百台服务器,处理PB级别的数据。es也是用Java开发并使用...
Elasticsearch官方提供数据案例account.json