开发者

SpringBoot集成Easy-Es的实战操作指南

开发者 https://www.devze.com 2025-08-30 10:25 出处:网络 作者: 会飞的架狗师
目录一、Easy ES 简介二、环境准备1. 依赖引入2. 增加配置三、核心功能集成1. 新增 Mapper2. 指定索引3. 在启动类上添加 ES 的 Mapper 扫描配置4. 使用 Easy ES 进行查询四、Easy ES 的用法1.基础 CRUD 示例2.分页查
目录
  • 一、Easy ES 简介
  • 二、环境准备
    • 1. 依赖引入
    • 2. 增加配置
  • 三、核心功能集成
    • 1. 新增 Mapper
    • 2. 指定索引
    • 3. 在启动类上添加 ES 的 Mapper 扫描配置
    • 4. 使用 Easy ES 进行查询
  • 四、Easy ES 的用法
    • 1.基础 CRUD 示例
    • 2.分页查询
    • 3. 复杂布尔查询
    • 4. 高亮显示
    • 5. 开启自动创建索引的两种方式
  • 五、注意事项
    • 六、总结

      一、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: true
        address: 127.0.0.1:9200
        username: admin
        password: 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 {
          @Resource
          private MyEsCollectionMapper myE编程sCollectionMapper;
      
          @Test
          public 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 {
          @Resource
          private ArticleMapper articleMapper;
      
          // 新增文档
          public Boolean adDarticle(Article article) {
              rwww.devze.cometurn articleMapper.insert(article) > 0;
          }
      
          // 条件查询
          public List<Article> searchByKeyword(StrifECqNrng keyword) {
              LambdaEsQueryWrapper<Article> wrapper = new LambdaEsQueryWrapper<>http://www.devze.com();
              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) {
              fECqNrreturn 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 {
          @Bean
          public GlobalConfig globalConfig() {
              GlobalConfig config = new GlobalConfig();
              config.setAsyncProcessIndexBlocking(true); // 开启索引自动托管
              return config;
          }
      }
      

      五、注意事项

      索引管理:开启auto-create-index后,首次插入数据时会自动创建索引

      字段映射:ES 字段类型需与 Java 类型匹配,避免类型转换异常

      分词器配置:中文搜索建议使用 ik 分词器,需提前安装插件

      版本兼容:确保 ES 服务版本与 Easy ES 兼容(推荐ES 7.x+)

      六、总结

      通过 Easy ES 框架,我们可以:

      • 减少约 80% 的 ES 操作代码量
      • 使用熟悉的 MyBatis-Plus 风格 API
      • 支持自动索引托管等高级特性
      • 保留原生 API 扩展能力

      到此这篇关于SpringBoot集成Easy-Es的实战操作指南的文章就介绍到这了,更多相关SpringBoot集成Easy-Es内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号