news 2026/4/30 4:18:43

SpringBoot 整合 Easy-Es 实战操作详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot 整合 Easy-Es 实战操作详解

Spring Boot 整合 Easy-ES 实战操作详解

Easy-ES 是一个基于 Elasticsearch 的 ORM 框架,类似于 MyBatis-Plus,但专注于简化 ES 操作。它提供了 MySQL-like 的语法,支持 Lambda 风格查询、自动映射、分页、聚合等功能,极大降低了直接使用 RestHighLevelClient 的复杂度。Easy-ES 适合需要全文搜索、复杂查询的 Spring Boot 项目,如电商搜索、日志分析等。

本教程基于 Easy-ES 最新版本(假设 2.x,实际以 GitHub 最新为准),从零搭建一个简单书籍管理系统,演示 CRUD 操作。假设你有基本的 Spring Boot 和 Elasticsearch 知识。

前提条件
  • JDK 8+(推荐 17+)
  • Spring Boot 2.7+ 或 3.x
  • Elasticsearch 7.x 或 8.x(本地或云端安装,启动后访问 http://localhost:9200 确认运行)
  • Maven 或 Gradle 作为构建工具
  • IDE 如 IntelliJ IDEA
步骤 1: 创建 Spring Boot 项目

使用 Spring Initializr 创建项目:

  • Group: com.example
  • Artifact: easy-es-demo
  • Dependencies: Spring Web, Spring Boot DevTools(后续添加 Easy-ES)

下载后导入 IDE。

步骤 2: 添加 Easy-ES 依赖

pom.xml中添加 Easy-ES Boot Starter 依赖(从官方 GitHub 获取最新版本):

<dependencies><!-- Easy-ES Boot Starter --><dependency><groupId>org.dromara</groupId><artifactId>easy-es-boot-starter</artifactId><version>2.7.1</version><!-- 替换为最新版本,从 Maven Central 或 GitHub 检查 --></dependency><!-- Lombok 可选,简化实体类 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies>

更新 Maven 依赖。

步骤 3: 配置 Elasticsearch 连接

application.ymlapplication.properties中配置 ES 连接。Easy-ES 会自动配置,无需额外 Bean。

# application.ymleasy-es:address:127.0.0.1:9200# ES 地址,多个用逗号分隔username:elastic# 如果有认证password:your_passwordschema:http# 或 httpsconnect-timeout:1000# 连接超时(ms)socket-timeout:30000# 套接字超时(ms)request-timeout:30000# 请求超时(ms)connect-request-timeout:1000# 其他可选配置:enable-content-log: false(关闭内容日志)、enable-global-select: true 等# Spring Boot 日志级别(可选,调试用)logging:level:org.dromara.easyes:debug

最佳实践

  • 生产环境使用 HTTPS 和认证。
  • 如果 ES 集群,配置多个 address。
  • 监控日志级别,调试时设为 debug,便于查看生成的 ES DSL 查询。
步骤 4: 创建实体类(Document)

实体类对应 ES 中的文档。使用@EsId标记 ID,使用@EsIndexName指定索引名(可选)。

importlombok.Data;importorg.dromara.easyes.annotation.IndexField;importorg.dromara.easyes.annotation.IndexId;importorg.dromara.easyes.annotation.IndexName;importorg.dromara.easyes.common.constants.EsConstants;importorg.dromara.easyes.common.enums.IdType;@Data@IndexName("book_index")// 指定 ES 索引名publicclassBook{@IndexId(type=IdType.CUSTOMIZE)// ID 类型,自定义或 PRIMARY_KEYprivateStringid;// ES 文档 ID@IndexField(fieldType=EsConstants.TEXT)// 指定字段类型privateStringtitle;// 书名@IndexField(fieldType=EsConstants.KEYWORD)privateStringauthor;// 作者@IndexField(fieldType=EsConstants.DOUBLE)privateDoubleprice;// 价格@IndexField(fieldType=EsConstants.DATE)privateStringpublishDate;// 出版日期 (格式: yyyy-MM-dd)}

最佳实践

  • 使用@IndexField指定类型,避免默认映射错误(e.g., text 用于全文搜索,keyword 用于精确匹配)。
  • ID 类型:CUSTOMIZE 为自定义字符串 ID,PRIMARY_KEY 为自增。
  • 如果索引不存在,Easy-ES 会自动创建。
步骤 5: 创建 Mapper 接口

Mapper 继承BaseEsMapper<T>,无需实现方法,即可使用 CRUD。

importorg.dromara.easyes.core.base.BaseEsMapper;publicinterfaceBookMapperextendsBaseEsMapper<Book>{// 可自定义方法,但基础 CRUD 已内置}

最佳实践

  • 继承后即可调用insertselectByIdupdateByIddeleteById等。
  • 对于复杂查询,使用 LambdaEsQueryWrapper 构建。
步骤 6: 创建 Service 层

Service 使用 Mapper 进行业务操作。

importlombok.RequiredArgsConstructor;importorg.dromara.easyes.core.conditions.LambdaEsQueryWrapper;importorg.dromara.easyes.core.conditions.LambdaEsUpdateWrapper;importorg.springframework.stereotype.Service;importjava.util.List;@Service@RequiredArgsConstructorpublicclassBookService{privatefinalBookMapperbookMapper;// 新增书籍publicvoidaddBook(Bookbook){bookMapper.insert(book);}// 查询所有书籍publicList<Book>getAllBooks(){LambdaEsQueryWrapper<Book>wrapper=newLambdaEsQueryWrapper<>();returnbookMapper.selectList(wrapper);}// 根据标题模糊搜索publicList<Book>searchByTitle(Stringtitle){LambdaEsQueryWrapper<Book>wrapper=newLambdaEsQueryWrapper<>();wrapper.like(Book::getTitle,title);// 模糊匹配returnbookMapper.selectList(wrapper);}// 更新价格publicvoidupdatePrice(Stringid,DoublenewPrice){LambdaEsUpdateWrapper<Book>wrapper=newLambdaEsUpdateWrapper<>();wrapper.eq(Book::getId,id).set(Book::getPrice,newPrice);bookMapper.update(null,wrapper);}// 删除书籍publicvoiddeleteBook(Stringid){bookMapper.deleteById(id);}}

最佳实践

  • 使用 LambdaEsQueryWrapper 构建查询,像 MyBatis-Plus 一样链式调用(eq、like、gt、in 等)。
  • 支持分页:wrapper.limit(10, 1);(size, page)。
  • 聚合查询:wrapper.groupBy(Book::getAuthor).agg(AggType.COUNT);
  • 避免直接写 ES DSL,充分利用 Easy-ES 的 SQL-like 语法,提高可读性。
步骤 7: 创建 Controller 层

暴露 REST API。

importlombok.RequiredArgsConstructor;importorg.springframework.web.bind.annotation.*;importjava.util.List;@RestController@RequestMapping("/books")@RequiredArgsConstructorpublicclassBookController{privatefinalBookServicebookService;// 新增@PostMappingpublicStringadd(@RequestBodyBookbook){bookService.addBook(book);return"Added successfully";}// 查询所有@GetMappingpublicList<Book>getAll(){returnbookService.getAllBooks();}// 搜索@GetMapping("/search")publicList<Book>search(@RequestParamStringtitle){returnbookService.searchByTitle(title);}// 更新@PutMapping("/{id}")publicStringupdate(@PathVariableStringid,@RequestParamDoubleprice){bookService.updatePrice(id,price);return"Updated successfully";}// 删除@DeleteMapping("/{id}")publicStringdelete(@PathVariableStringid){bookService.deleteBook(id);return"Deleted successfully";}}
步骤 8: 启动与测试
  • 启动 Spring Boot 应用(main方法)。
  • ES 会自动创建索引book_index
  • 使用 Postman 测试:
    • POST /books:{“title”:“Spring Boot Guide”,“author”:“Author”,“price”:29.99,“publishDate”:“2026-01-01”}
    • GET /books/search?title=Spring → 返回匹配书籍
  • 检查日志,查看生成的 ES DSL 查询。
常见问题与最佳实践
  • 索引管理:Easy-ES 支持自动建索引,但生产中建议手动优化映射(analyzer、分词器)。
  • 性能优化:使用分页、避免全表扫描。复杂查询用 aggregation。
  • 错误处理:捕获EsException,日志记录 ES DSL。
  • 多数据源:配置easy-es.datasource支持多 ES 集群。
  • 版本兼容:确保 ES 版本与 Easy-ES 匹配(官网检查)。
  • 测试:使用@EsTest注解单元测试 Mapper。
  • 安全:生产中启用 ES 认证,配置用户名/密码。
  • 扩展:支持自定义插件、拦截器(e.g., 审计日志)。

参考来源:(Easy-ES GitHub 官方仓库)。

这个实战覆盖了基本整合,如果你有特定场景(如聚合查询、分页),可以进一步扩展!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 23:27:36

PWS-5电子伺服组合式陶瓷股骨头疲劳试验机

PWS-5电子伺服组合式陶瓷股骨头疲劳试验机 一、概述 本机主要应用于 YY/T0809.6-2018带柄股骨部件颈部疲劳性能试验和性能要求、ISO7206-6&#xff1a;2013外科植入物部分和全髋关节假体的拉压疲劳试验。也可以用于带锁髓内钉、带柄股骨部件、有扭矩作用的带柄股骨部件、金属…

作者头像 李华
网站建设 2026/4/25 8:59:48

国内首个基于宏内核的嵌入式实时操作系统

在科技快速发展的今天&#xff0c;传统嵌入式操作系统存在实时性差&#xff0c;缺乏智能化等问题&#xff0c;难以胜任复杂的应用场景。 望获实时Linux&#xff0c;作为国科环宇重点研发的产品&#xff0c;是国内首个基于宏内核的嵌入式实时操作系统&#xff0c;具备智能化、硬…

作者头像 李华
网站建设 2026/4/30 0:07:04

YOKOGAWA701933 日本横河 701933 电流探头 50MHZ

‌ 横河701933电流探头 是一款高性能的电流测量工具&#xff0c;适用于各种电子测量需求。‌基本参数和功能 横河701933电流探头的具体参数包括&#xff1a;‌频带宽度‌&#xff1a;DC至50MHz ‌连续输入范围‌&#xff1a;30A rms ‌可测量导体直径‌&#xff1a;φ5mm ‌电缆…

作者头像 李华
网站建设 2026/4/25 17:49:21

救命神器9个一键生成论文工具,本科生轻松搞定毕业论文!

救命神器9个一键生成论文工具&#xff0c;本科生轻松搞定毕业论文&#xff01; 论文写作的救星&#xff0c;AI 工具如何改变你的学术之路 在当今这个信息爆炸的时代&#xff0c;学术写作正变得越来越复杂。尤其是对于本科生而言&#xff0c;撰写一篇结构严谨、内容充实的毕业论…

作者头像 李华
网站建设 2026/4/26 2:16:31

Python 高效实现 Word 转 PDF:告别 Office 依赖

Python 高效实现 Word 转 PDF&#xff1a;彻底告别 Office 依赖&#xff08;2026 年实用方案&#xff09; 在服务器、Docker、Linux 无头环境、自动化脚本、批量处理等场景下&#xff0c;依赖 Microsoft Office&#xff08;COM / win32com&#xff09;的方式已经越来越不可接受…

作者头像 李华