目录
一、前言
二、SpringBoot 对接Elasticsearch常用技术方案
2.1 Spring Data Elasticsearch
2.3 Easy-Es
三、Easy-Es 介绍
3.1 Easy-Es 是什么
3.2 Easy-Es 特点
3.3 Easy-Es 优势
四、SpringBoot 操作Easy-Es详细过程
4.1 前置准备
4.1.1 es 服务搭建
4.1.2 导入核心依赖
4.1.3 添加配置文件
4.2 基础操作
4.2.1 增加实体类
4.2.2 添加自定义接口
4.2.3 增加几个测试接口
4.2.4 接口业务实现
4.2.5 接口扫描
4.2.7 接口效果测试
五、写在文末
一、前言
在使用SpringBoot 进行微服务的开发中,Elasticsearch是一种高频使用的文档检索性数据库,在很多需要实时检索,或者对文档检索性能要求比较高的场景。在这样的业务场景中,经常会涉及到对Elasticsearch的文档数据的增删改查操作,对很多程序员来说,写习惯了通过mybatis操作mysql的语法,对于操作es的代码,写起来还是比较头疼的,主要是API的编写比较复杂,语法多样灵活,本篇将介绍另一种适合大多数程序员快速上手用于操作es的技术框架Easy-Es。
二、SpringBoot 对接Elasticsearch常用技术方案
在微服务开发中,如果涉及到与ES的整合,面临着技术选型,选择一种合适的对接技术方案,会给团队的开发成本,后期维护等带来诸多便利,Spring Boot 与 Elasticsearch (ES) 的集成有多种方式,下面介绍几种常用的技术解决方案。
2.1 Spring Data Elasticsearch
这是一种最常用的官方集成方案,提供高级抽象和便捷的 Repository 支持。类似于其他的一些操作数据库的技术组件,比如JPA操作mysql,操作mongodb的jps等类似。这种方式对接起来比较简单,常用的增删改查接口组件中已经封装好了,开发者直接调用即可完成对es的基础操作。

其核心特点如下:
- 自动配置 Elasticsearch 客户端
- 支持基于方法名的查询自动生成
- 提供 ElasticsearchRepository 接口
- 支持注解方式定义映射
核心配置文件:
示例操作代码:
- 从代码不难看出,开发者只需要继承一个Repository接口,就可以在业务代码中注入进行调用
这是官方推荐的 Java 客户端,基于 REST API,适用于需要更细粒度控制的场景。也是早些年在实际项目开发中使用非常高频的一种整合并操作es的方式。官方使用文档,以7.X为例: Compatibility | Java REST Client [7.0] | Elastic

Rest High Level Client的具备如下优点:
- 官方维护,兼容性好
- 由 Elastic 官方开发和维护,与 Elasticsearch 版本同步更新,兼容性有保障。
- 适合生产环境长期使用,API 稳定,减少因版本升级导致的兼容性问题。
- 功能全面,支持最新 ES 特性
- 支持 Elasticsearch 的所有 REST API,包括索引、搜索、聚合、脚本、集群管理等。
- 可以访问 Elasticsearch 的最新功能(如 Painless 脚本、向量搜索等)。
- 细粒度控制,灵活性高
- 相比 Spring Data Elasticsearch 的抽象封装,Rest High Level Client 提供更底层的 API,可以精确控制查询、索引、批量操作等。
- 适合复杂查询场景(如嵌套聚合、自定义评分、高亮等)。
- 性能优化支持
- 支持 Bulk API(批量操作)、Scroll API(大数据集查询)、Async API(异步请求)等高性能操作。
- 可以手动调整 refresh、routing、timeout 等参数优化性能。
- 支持异步请求(Async API)
- 提供 RestHighLevelClient 的异步版本(executeAsync),适用于高并发场景,减少线程阻塞。
- 适用于微服务架构
- 基于 HTTP/REST,不依赖 Elasticsearch 的 Transport 协议(旧版 Java API 使用 TCP 协议,已被废弃)。
- 适合微服务架构,跨语言调用更友好。
操作示例代码:
2.3 Easy-Es
Easy-Es(简称 EE)是一款基于 Elasticsearch 官方 RestHighLevelClient 打造的 ORM 开发框架,旨在简化 Elasticsearch 的开发流程,提高开发效率。它的设计理念是"只做增强不做改变",在保留原生 Elasticsearch 功能的同时,提供了更加便捷的开发体验。 该框架具备如下特点:
- 与 MyBatis-Plus 高度相似的语法设计
- Easy-Es 采用了与 MyBatis-Plus(MP)几乎相同的语法设计(99%相似度),这使得熟悉 MP 的开发者可以几乎零学习成本地使用 EE。EE 可以被视为 MP 在 Elasticsearch 领域的替代版本,在某些方面甚至比 MP 更简单。
- 全自动索引托管
- Easy-Es 首创了全自动索引托管模式,开发者无需关心索引的创建、更新及数据迁移等繁琐步骤。框架可以自动完成索引生命周期的管理,整个过程零停机,用户无感知。
- 屏蔽语言差异
- 开发者只需要掌握 MySQL 语法即可使用 Elasticsearch,真正做到"一通百通"。无需学习 Elasticsearch 特有的复杂语法,这对于不常使用 ES 的开发者尤其友好16。
- 显著减少代码量
- 与直接使用 RestHighLevelClient 相比,Easy-Es 可以节省 3-8 倍的代码量。例如,复杂的查询条件可以通过简单的链式调用实现,大大提高了开发效率。
- 智能字段类型推断
- 框架能够根据索引类型和当前查询类型上下文智能判断查询是否需要拼接 .keyword 后缀,减少开发者误用的可能性。

三、Easy-Es 介绍
3.1 Easy-Es 是什么
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的ElasticsearchClient打造的ORM开发框架,在 ElasticsearchClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,在有些方面甚至比MP更简单,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发。中文文档: Easy-Es

3.2 Easy-Es 特点
相比其他的操作ES的技术组件或框架,Easy-Es具有如下特点:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper,仅仅通过少量配置即可实现大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错段
- 支持主键自动生成:支持2 种主键策略,可自由配置,完美解决主键问题
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 内置分页插件:基于ElasticsearchClient 物理分页,开发者无需关心具体操作,且无需额外配置插件,写分页等同于普通 List 查询,且保持和PageHelper插件同样的分页返回字段,无需担心命名影响
- MySQL功能全覆盖:MySQL中支持的功能通过EE都可以轻松实现
- 支持ES高阶语法:支持高亮搜索,分词查询,权重查询,Geo地理位置查询,IP查询,聚合查询等高阶语法
- 良好的拓展性:底层仍使用ElasticsearchClient,可保持其拓展性,开发者在使用EE的同时,仍可使用ElasticsearchClient的功能。
3.3 Easy-Es 优势
使用Easy-Es具有如下优势:
- 全自动索引托管: 全球开源首创的索引托管模式,开发者无需关心索引的创建更新及数据迁移等繁琐步骤,索引全生命周期皆可托管给框架,由框架自动完成,过程零停机,用户无感知,彻底解放开发者
- 智能字段类型推断: 根据索引类型和当前查询类型上下文综合智能判断当前查询是否需要拼接.keyword后缀,减少小白误用的可能
- 屏蔽语言差异: 开发者只需要会MySQL语法即可使用Es,真正做到一通百通,无需学习枯燥易忘的Es语法,Es使用相对MySQL较低频,学了长期不用也会忘,没必要浪费这时间.开发就应该专注于业务,省下的时间去撸铁,去陪女朋友陪家人,不做资本家的韭菜
- 代码量极少: 与直接使用ElasticsearchClient相比,相同的查询平均可以节省3-80倍左右的代码量
- 零魔法值: 字段名称直接从实体中获取,无需输入字段名称字符串这种魔法值,提高代码可读性,杜绝因字段名称修改而代码漏改带来的Bug
- 拓展性强: 框架内置混合查询,原生查询,无论是索引层面还是CRUD层面,都拥有>=原生API的拓展性,无需担心引入后影响开发,只要是ES本身能支持的功能使用Easy-ES都可以搞定
- 零额外学习成本: 开发者只要会国内最受欢迎的Mybatis-Plus语法,即可无缝迁移至EE,EE采用和前者相同的语法,消除使用者额外学习成本,直接上手,爽
- 降低开发者门槛: Es通常需要中高级开发者才能驾驭,但通过接入EE,即便是只了解ES基础的初学者也可以轻松驾驭ES完成绝大多数需求的开发,可以提高人员利用率,降低企业成本
四、SpringBoot 操作Easy-Es详细过程
接下来通过代码操作,演示下如何在SpringBoot 微服务中通过整合Easy-Es操作es的索引。
4.1 前置准备
4.1.1 es 服务搭建
在代码层面正式开始之前,需要先做下面的2个准备:
- 搭建es服务,可以考虑使用docker搭建,相对简单一些;
- 搭建kibana,为了操作Es 索引方便,方便可视化查看数据;

4.1.2 导入核心依赖
在工程pom中导入下面的核心依赖,其中最核心的依赖文件 easy-es-boot-starter 可以根据自己的项目版本酌情选择,注意版本匹配性。
4.1.3 添加配置文件
在工程配置文件中配置下面的信息,下面并给出关于easy-es的详细参数配置说明,开发者可以结合自身的实际使用情况配置。
基础参数配置:
拓展配置:
- 可缺省,不影响项目启动,为了提高生产环境性能,建议您按需配置
全局配置:
- 可缺省,不影响项目启动,若缺省则为默认值
多数据源配置:
- 类似于操作mysql时,可以在同一个代码中,操作多个不同数据源的数据
其他配置:
4.2 基础操作
案例需求,我们将创建一个名为book_info的索引,然后通过接口对该索引进行数据的增删改查的操作。
4.2.1 增加实体类
自定义一个实体类,作为索引中的文档对象,如下:
关于实体类对象中的各个属性上面的注解使用,详细的解释可以参考官方的文档说明

4.2.2 添加自定义接口
自定义一个接口,继承 BaseEsMapper,跟我们操作mybatis-plus看起来一样
4.2.3 增加几个测试接口
为了方便测试看效果,添加几个测试接口
4.2.4 接口业务实现
下面是具体的业务实现层逻辑
4.2.5 接口扫描
在工程的启动类上面添加对mapper接口所在包目录的扫描配置

4.2.7 接口效果测试
接下来启动工程,分别对上面的接口进行功能验证。项目中集成了swagger,可以方便对接口进行操作。
1)创建索引

通过kibana控制台查看索引是否创建成功

2)添加文档
随机添加几条测试数据

由于开启了输出日志,在后台的控制台中可以看到相关的输出日志,类似于mybatis操作数据库的sql日志,方便开发者看问题

添加完成后,在kibana中可以看到2条新增的记录

3)查询文档数据
分别验证精准匹配和模糊匹配


从后台的输出日志不难看出,走的是模糊匹配,框架自动帮开发者做了封装实现

3)删除文档数据
调用删除接口,根据ID进行删除数据

再次查询,这条记录就查不到了

五、写在文末
本文通过案例操作演示,详细介绍了Easy-Es的详细使用,还有更多好用的功能,有兴趣的同学可以基于此继续深入研究,本篇到此结束,感谢观看。
所有评论(0)