当前位置: 首页 > news >正文

【SpringBoot实战指南】集成Easy ES

一、Easy ES 简介

Easy ES(简称EE)是一款基于 Elasticsearch 官方 RestHighLevelClient 封装的 ORM 框架,提供类似 MyBatis-Plus 的 API 设计,可以帮助开发者更简单地集成和使用 Elasticsearch,让操作 Elasticsearch 变得更加方便和高效,大大降低了 Elasticsearch 操作复杂度。

二、环境准备

1. 依赖引入

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.19</version>
</dependency><dependency><groupId>org.dromara.easy-es</groupId><artifactId>easy-es-boot-starter</artifactId><version>2.0.0</version>
</dependency>

2. 增加配置

# application.yml
easy-es:enable: trueaddress: 127.0.0.1:9200username: adminpassword: 123456# 可选配置global-config:print-dsl: true # 打印DSL语句async-process-index-blocking: true # 自动托管索引

三、核心功能集成

1. 新增 Mapper

自定义一个 Mapper,并继承 BaseEsMapper

public interface MyEsCollectionMapper extends BaseEsMapper<MyCollection> {}

2. 指定索引

在 Collection 中,需要指定和 ES 交互的索引 key

@Data
@IndexName(value = "my_collection")
public class MyCollection extends BaseEntity {/*** 姓名*/private String name;// 其他字段}

3. 在启动类上添加 ES 的 Mapper 扫描配置

@EsMapperScan("cn.feizhu.jgs.*.infrastructure.es.mapper")

4. 使用 Easy ES 进行查询

@Component
public class MyEsCollectionMapperTest {@Resourceprivate MyEsCollectionMapper myEsCollectionMapper;@Testpublic void test(){LambdaEsQueryWrapper<MyCollection> queryWrapper = new LambdaEsQueryWrapper<>();queryWrapper.match(MyCollection::getName, "会飞的我").and(wrapper -> wrapper.match(MyCollection::getIsDeleted, true));EsPageInfo<MyCollection> results = myEsCollectionMapper.pageQuery(queryWrapper, 1, 10);}
}

四、Easy ES 的用法

1.基础 CRUD 示例

@Service
public class ArticleService {@Resourceprivate ArticleMapper articleMapper;// 新增文档public Boolean addArticle(Article article) {return articleMapper.insert(article) > 0;}// 条件查询public List<Article> searchByKeyword(String keyword) {LambdaEsQueryWrapper<Article> wrapper = new LambdaEsQueryWrapper<>();wrapper.match(Article::getContent, keyword);return articleMapper.selectList(wrapper);}// 更新文档public Boolean updateAuthor(String id, String newAuthor) {Article article = new Article();article.setId(id);article.setAuthor(newAuthor);return articleMapper.updateById(article) > 0;}// 删除文档public Boolean deleteArticle(String id) {return articleMapper.deleteById(id) > 0;}
}

2.分页查询

public PageInfo<Article> searchPage(String keyword, int pageNum, int pageSize) {LambdaEsQueryWrapper<Article> wrapper = new LambdaEsQueryWrapper<>();wrapper.match(Article::getTitle, keyword).orderByDesc(Article::getCreateTime);return articleMapper.pageQuery(wrapper, pageNum, pageSize);
}

3. 复杂布尔查询

public List<Article> complexQuery(String author, Date startDate) {LambdaEsQueryWrapper<Article> wrapper = new LambdaEsQueryWrapper<>();wrapper.eq(Article::getAuthor, author).ge(Article::getCreateTime, startDate).or().match(Article::getContent, "技术");return articleMapper.selectList(wrapper);
}

4. 高亮显示

public List<Article> searchWithHighlight(String keyword) {LambdaEsQueryWrapper<Article> wrapper = new LambdaEsQueryWrapper<>();wrapper.match(Article::getContent, keyword).highLight(Article::getContent, "<em>", "</em>", 100);return articleMapper.selectList(wrapper);
}

5. 开启自动创建索引的两种方式

1.通过配置文件开启(推荐)

# application.yml
easy-es:global-config:async-process-index-blocking: true  # 自动托管索引(包含自动创建)

2.通过代码配置(动态启用)

@Configuration
public class EsConfig {@Beanpublic GlobalConfig globalConfig() {GlobalConfig config = new GlobalConfig();config.setAsyncProcessIndexBlocking(true); // 开启索引自动托管return config;}
}

五、注意事项

  1. 索引管理:开启auto-create-index后,首次插入数据时会自动创建索引
  2. 字段映射:ES 字段类型需与 Java 类型匹配,避免类型转换异常
  3. 分词器配置:中文搜索建议使用 ik 分词器,需提前安装插件
  4. 版本兼容:确保 ES 服务版本与 Easy ES 兼容(推荐ES 7.x+)

六、总结

通过 Easy ES 框架,我们可以:
● 减少约 80% 的 ES 操作代码量
● 使用熟悉的 MyBatis-Plus 风格 API
● 支持自动索引托管等高级特性
● 保留原生 API 扩展能力

http://www.xdnf.cn/news/438373.html

相关文章:

  • OpenCV实现数字水印的相关函数和示例代码
  • QListWedget控件使用指南
  • 50. Pow(x, n)
  • 网络互联技术深度解析:理论、实践与进阶指南
  • stm32之FLASH
  • C++效率掌握之STL库:map set底层剖析及迭代器万字详解
  • 【node】如何把包发布到npm上
  • 3D 数据可视化系统是什么?具体应用在哪方面?
  • 【Linux网络】网络层
  • 微服务商城(1)开篇、服务划分
  • 77. 组合【 力扣(LeetCode) 】
  • AGI大模型(15):向量检索之调用ollama向量数据库
  • 视频图像压缩领域中 DCT 的 DC 系数和 AC 系数详解
  • 【JAVA常见数据类型】
  • 【工奥阀门科技有限公司】签约智橙PLM
  • 家用或办公 Windows 电脑玩人工智能开源项目配备核显的必要性(含 NPU 及显卡类型补充)
  • 基于RFSOC ZU28DR+DSP 6U VPX处理板
  • 适配华为昇腾 NPU 的交互式监控工具
  • Java问题排查常用命令行工具速查表
  • 深度学习中.cuda()、.eval()与no_grad详解
  • 【MySQL】日志缓冲区详解 以及 InnoDB内存结构总结
  • 解决docker alpine缺少字体的问题 Could not initialize class sun.awt.X11FontManager
  • 浅析 Golang 内存管理
  • Chrome安装最新vue-devtool插件
  • 国产免费工作流引擎star 6.5k,Warm-Flow升级1.7.2(新增案例和修复缺陷)
  • 【​​HTTPS基础概念与原理​】​​SSL/TLS协议演进史:从SSLv3到TLS 1.3
  • 嵌入式Linux Qt开发:2、Qt creator简单配置、Qt Designer使用以及信号槽机制使用
  • QT之信号与槽
  • 嵌入式设计模式基础--C语言的继承封装与多态
  • Java 性能调优全解析:从设计模式到 JVM 的 7 大核心方向实践