Elasticsearch search after分页检索案例

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elasticsearch search after分页检索案例分享 The best elasticsearch highlevel java rest api-----bboss 1.准备工作 参考文档《高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端 2.
Elasticsearch search after分页检索案例分享
The best elasticsearch highlevel java rest api----- bboss

1.准备工作
参考文档《 高性能elasticsearch ORM开发库使用介绍》导入和配置es客户端

2.编写创建索引表和初始化数据方法
创建索引表和初始化数据的组件 DocumentCRUD 实现本文不做重点介绍,请访问 视频教程了解:
/**
 * 创建索引表并导入测试数据
 */
public void initIndiceAndData(){
   DocumentCRUD documentCRUD = new DocumentCRUD();
   documentCRUD.testCreateIndice();//创建索引表
   documentCRUD.testBulkAddDocuments();//导入测试数据
}

3.定义searchAfter dsl配置文件
新建配置文件-esmapper/searchafter.xml

定义searchAfterDSL
<properties>
    <property name="searchAfterDSL">
        <![CDATA[{
            #*
               以demoId,_uid为searchAfter的分页条件 _uid值格式type#_id 由索引类型加#号加id拼接而成
               如果按照多个字段的值做searchAter分页,则用逗号分隔每个值
            *#
            #if($searchAfterId) ## 第一次检索的时候,没有searchAfterId变量,只有做翻页操作的时候才会传递代表分页起点的searchAfterId变量进来
                 "search_after": [#[demoId],"demo#[searchAfterId,quoted=false,lpad=#]"],
            #end
            "size": $pageSize, ##searchAfter分页每页最多显示的记录条数
            #*
                searchAfter分页检索时,必须用翻页字段作为排序字段,这里是demoId和_uid两个字段,如果是多个字段,则按照searchAfter的顺序来设置对应的排序属性
            *#
            "sort": [
                {"demoId": "asc"},
                {"_uid": "asc"}
            ],
            ## 其他检索条件,按照时间范围查询数据,所有数据按照上面的searchAter机制进行分页
            "query": {
                "bool": {
                    "filter": [
                        {
                            "range": {
                                "agentStarttime": {
                                    "gte": #[startTime],
                                    "lt": #[endTime]
                                }
                            }
                        }
                    ]
                }
            }
        }]]>
    </property>
</properties>

4.定义实现searchAfter的代码
    public void doSeachAfter() throws ParseException {
		//创建加载配置文件的客户端工具,用来检索文档,单实例多线程安全
		ClientInterface clientUtil = ElasticSearchHelper.getConfigRestClientUtil("esmapper/searchafter.xml");
		Map params = new HashedMap();//定义检索条件,将dsl中需要的参数放置到params中
		params.put("pageSize",100);
		DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		params.put("startTime",dateFormat.parse("2017-09-02 00:00:00").getTime());
		params.put("endTime",new Date().getTime());
		//执行查询,demo为索引表,_search为检索操作action
		ESDatas<Demo> esDatas =  //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定
				clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action
						"searchAfterDSL",//esmapper/demo.xml中定义的dsl语句
						params,//变量参数
						Demo.class);//返回的文档封装对象类型
		//获取结果对象列表,最多返回1000条记录
		List<Demo> demos = esDatas.getDatas();
		//获取总记录数
		long totalSize = esDatas.getTotalSize();

		do{
			if(demos != null)
				System.out.println("返回当前页记录数:"+demos.size());
			if(demos != null && demos.size() == 100) { //还有数据,则通过searchAfter继续获取下一页数据
				String searchAfterId = (String) demos.get(99).getId();//获取最后一条记录的_id值
				params.put("searchAfterId", searchAfterId);//设置searchAfterId为分页起点_id值
				long demoId =  demos.get(99).getDemoId();//获取最后一条记录的demoId值
				params.put("demoId", demoId);//设置searchAfterId为分页起点demoId值
				esDatas =  //ESDatas包含当前检索的记录集合,最多1000条记录,由dsl中的size属性指定
						clientUtil.searchList("demo/_search",//demo为索引表,_search为检索操作action
								"searchAfterDSL",//esmapper/demo.xml中定义的dsl语句
								params,//变量参数
								Demo.class);//返回的文档封装对象类型

				demos = esDatas.getDatas();

			}
			else{//如果是最后一页,没有数据返回或者获取的记录条数少于100结束分页操作
				break;
			}
		}while(true);
		System.out.println("总记录数:"+totalSize);

	}

5.通过junit单元测试用例运行案例
	@Test
	public void testSeachAfter() throws ParseException {
		DocumentSearchAfter documentSearchAfter = new DocumentSearchAfter();
		documentSearchAfter.initIndiceAndData();//创建索引表并导入searchAfter分页测试数据
		documentSearchAfter.doSeachAfter();//执行searchAfter分页操作
	}

6.参考文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-search-after.html

案例对应源码工程:

https://gitee.com/bboss/eshelloword

elasticsearch技术交流群:166471282

elasticsearch微信公众号:
img_a21db47cf20ac4820026d60bcb2b9470.jpe
相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。 &nbsp;
目录
相关文章
|
7月前
|
弹性计算 运维 算法
阿里云 Elasticsearch Serverless 检索增强型 8.17 版来袭!
阿里云Elasticsearch Serverless 8.17版本,深度融合无服务器架构与分层扩展能力,面向信息检索、向量搜索、语义分析等通用场景,提供全托管服务,在最新特性扩展、自动扩缩性能、资源成本优化等维度均有显著提升。
379 15
|
存储 API 数据库
检索服务elasticsearch索引(Index)
【8月更文挑战第23天】
636 6
|
存储 负载均衡 监控
检索服务elasticsearch节点(Node)
【8月更文挑战第23天】
257 5
|
11月前
|
弹性计算 运维 Serverless
超值选择:阿里云Elasticsearch Serverless在企业数据检索与分析中的高性能与灵活性
本文介绍了阿里云Elasticsearch Serverless服务的高性价比与高度弹性灵活性。
478 8
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
845 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
存储 自然语言处理 关系型数据库
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
聚合、补全、RabbitMQ消息同步、集群、脑裂问题、集群分布式存储、黑马旅游实现过滤和搜索补全功能
ElasticSearch基础3——聚合、补全、集群。黑马旅游检索高亮+自定义分词器+自动补全+前后端消息同步
|
缓存 关系型数据库 API
京东面试题:ElasticSearch深度分页解决方案!
京东面试题:ElasticSearch深度分页解决方案!
251 0
|
机器学习/深度学习 存储 搜索推荐
Elasticsearch与深度学习框架的集成案例研究
Elasticsearch 是一个强大的搜索引擎和分析引擎,广泛应用于实时数据处理和全文搜索。深度学习框架如 TensorFlow 和 PyTorch 则被用来构建复杂的机器学习模型。本文将探讨如何将 Elasticsearch 与这些深度学习框架集成,以实现高级的数据分析和预测任务。
261 0
|
6月前
|
JSON 安全 数据可视化
Elasticsearch(es)在Windows系统上的安装与部署(含Kibana)
Kibana 是 Elastic Stack(原 ELK Stack)中的核心数据可视化工具,主要与 Elasticsearch 配合使用,提供强大的数据探索、分析和展示功能。elasticsearch安装在windows上一般是zip文件,解压到对应目录。文件,elasticsearch8.x以上版本是自动开启安全认证的。kibana安装在windows上一般是zip文件,解压到对应目录。elasticsearch的默认端口是9200,访问。默认用户是elastic,密码需要重置。
3215 0
|
7月前
|
安全 Java Linux
Linux安装Elasticsearch详细教程
Linux安装Elasticsearch详细教程
1231 1

热门文章

最新文章

下一篇
oss云网关配置