开放代码社区 › Easy-Es ElasticSearch 简化框架

Easy-Es ElasticSearch 简化框架

开发工具Java

Easy-Es 是一款简化 ElasticSearch 搜索引擎操作的开源框架,提供全自动智能索引托管、字段类型智能推断与 Lambda 链式条件构造器。开发者只需掌握 MySQL 或 MyBatis-Plus 语法即可完成增删改查、分词、高亮、嵌套、地理位置等查询,大幅减少代码量,适用于 Java 项目中快速集成 ES 的开发场景。

AI/机器学习Web后端前端工具数据库
作者:用户6868语言:Java更新:2026-10-27
仓库地址
https://gitee.com/dromara/easy-es.git

前往原仓库

README

<p align="center">
  <a href="https://easy-es.cn/">
   <img alt="East-Es-Logo" src="https://iknow.hs.net/042dd639-5bfa-410f-968f-8bbceb8d8ca7.png">
  </a>
</p>

<p align="center">
  您的Star是我继续前进的动力,如果喜欢EE请右上角帮忙点亮星星⭐!
</p>

<p align="center">
  <a href="https://search.maven.org/search?q=g:io.github.xpc1024%20a:easy-*">
    <img alt="maven" src="https://img.shields.io/github/v/release/xpc1024/easy-es?include_prereleases&logo=xpc&style=plastic">
  </a>
  <a href="https://www.murphysec.com/dr/htY0sMYDQaDn4X8iXp" alt="OSCS Status"><img src="https://www.oscs1024.com/platform/badge/dromara/easy-es.git.svg?size=small"/></a>
  <a href="https://www.apache.org/licenses/LICENSE-2.0">
    <img alt="code style" src="https://img.shields.io/badge/license-Apache%202-4EB1BA.svg?style=flat-square">
  </a>
</p>

# 官方地址 | Official website
---

**Dromara easy-es官网** https://easy-es.cn/ 

**Dromara easy-es官方gitee** https://gitee.com/dromara/easy-es

**Dromara easy-es官方github** https://github.com/dromara/easy-es

**Dromara easy-es官方gitcode** https://gitcode.com/dromara/easy-es

**开源社区Dromara** https://dromara.org/

**开源社区码云首页** https://gitee.com/dromara/

[Easy-Es-PPT下载](https://iknow.hs.net/21df32cf-35fb-44f0-945f-06330408c1bd.pptx)

> **Tip:** 官网是vue单页面应用,且服务部署在🇺🇸,国内用户首次访问加载可能比较慢🐢,主公们请耐心等待一下,后续会很快🏹,如偶遇打不开可刷新多尝试几次,或尝试魔法上网.

# 简介 | Intro
---

Easy-Es是一款简化ElasticSearch搜索引擎操作的开源框架,全自动智能索引托管.

目前功能丰富度和易用度及性能已全面领先SpringData-Elasticsearch.

简化`CRUD`及其它高阶操作,可以更好的帮助开发者减轻开发负担

底层采用Es官方提供的ElasticsearchClient,保证其原生性能及拓展性.

技术讨论 QQ 群 :897570597 群内可在群文件中免费领取 颈椎保护 | 增肌 | 减脂 等健身计划 无套路

微信群请先添加作者微信,由作者拉入 (亦可咨询健身问题,作者曾是健身教练)

为了开源社区能够走得更远,还望大家能够不吝点点三连:⭐Star,👀Watch,fork📌

支持一下国产开源,让更多人看到和使用本项目,非常感谢!

# 优点 | Advantages
---

- **全自动索引托管:** 全球开源首创的索引托管模式,开发者无需关心索引的创建更新及数据迁移等繁琐步骤,索引全生命周期皆可托管给框架,由框架自动完成,过程零停机,用户无感知,彻底解放开发者
- **智能字段类型推断:** 根据索引类型和当前查询类型上下文综合智能判断当前查询是否需要拼接.keyword后缀,减少小白误用的可能
- **屏蔽语言差异:** 开发者只需要会MySQL语法即可使用Es
- **代码量极少:** 与直接使用ElasticsearchClient相比,相同的查询平均可以节3-80倍左右的代码量
- **零魔法值:** 字段名称直接从实体中获取,无需输入字段名称字符串这种魔法值
- **零额外学习成本:** 开发者只要会国内最受欢迎的Mybatis-Plus语法,即可无缝迁移至Easy-Es
- **降低开发者门槛:** 即便是只了解ES基础的初学者也可以轻松驾驭ES完成绝大多数需求的开发
- **功能强大:** 支持MySQL的几乎全部功能,且对ES特有的分词,权重,高亮,嵌套,地理位置Geo,Ip地址查询等功能都支持
- **语法优雅:** 所有条件构造器均支持Lambda风格链式编程,编程体验和代码可读性大幅提升
- **安全可靠:** 墨菲安全扫描零风险,且代码单元测试综合覆盖率高达95%以上.
- **完善的中英文文档:** 提供了中英文双语操作文档,文档全面可靠,帮助您节省更多时间
- **兼容jdk8~jdk22:** 兼容jdk8~jdk17 支持RISC-V架构
- **...**

# 对比 | Compare
---
> 需求:查询出文档标题为 "传统功夫"且作者为"码保国"的所有文档
```java
    // 使用Easy-Es仅需1行代码即可完成查询
    List<Document> documents = documentMapper.selectList(EsWrappers.lambdaQuery(Document.class).eq(Document::getTitle, "传统功夫").eq(Document::getCreator, "码保国"));
```


```java
    // 传统方式, 直接用ElasticsearchClient进行查询 需要19行代码,还不包含下划线转驼峰,自定义字段处理及_id处理等代码
    String indexName = "document";
    SearchRequest searchRequest = new SearchRequest(indexName);
    BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
    TermQueryBuilder titleTerm = QueryBuilders.termQuery("title", "传统功夫");
    TermsQueryBuilder creatorTerm = QueryBuilders.termsQuery("creator", "码保国");
    boolQueryBuilder.must(titleTerm);
    boolQueryBuilder.must(creatorTerm);
    SearchRequest.Builder searchSourceBuilder = new SearchRequest.Builder();
    searchSourceBuilder.query(boolQueryBuilder);
    searchRequest.source(searchSourceBuilder);
    try {
         SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
         List<Document> documents = Optional.ofNullable(searchResponse)
                .map(SearchResponse::getHits)
                .map(SearchHits::getHits)
                .map(hit->Document document = JSON.parseObject(hit.getSourceAsString(),Document.class))
                .collect(Collectors.toList());
        } catch (IOException e) {
            e.printStackTrace();
        }
```
> * 以上只是简单查询演示,实际使用场景越复杂,效果就越好,平均可节省至少3-80倍代码量
> * 传统功夫,点到为止! 阁下若有不服,可继续"往下看"! 上述功能仅供演示,仅为Easy-Es支持功能的冰山一角,Easy-Es就是这么Easy到不讲武德💪,不用的请耗子尾汁.

# 深度对比 | Deep Compare
---

```java
 // MySQL语法  
 where business_type = 1
 and (state = 9 or (state = 8 and bidding_sign = 1))
 or (business_type = 2 and state in (2,3));

 // Easy-Es及Mybatis-Plus语法 
 wrapper.eq("business_type", 1)
 .and(a -> a.eq("state", 9).or(b -> b.eq("state", 8).eq("bidding_sign", 1)))
 .or(i -> i.eq("business_type", 2).in("state", 2, 3));
        

 // ES原生的RestHighLevel语法
 List<Integer> values = Arrays.asList(2, 3);
 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
 boolQueryBuilder.must(QueryBuilders.termQuery("business_type", 1));
 boolQueryBuilder.must(QueryBuilders.boolQuery()
                 .must(QueryBuilders.termQuery("state", 9))
                      .should(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("state", 8))
                              .must(QueryBuilders.termQuery("bidding_sign", 1))));
 boolQueryBuilder.should(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("business_type", 2))
               	 .must(QueryBuilders.termsQuery("state", values)));
```
> 上面的例子树的最大深度仅为2,如果深度超过2以后ES原生语法就很难看得懂了,更别说正确编码,就算您是ES老手也容易栽坑里,但使用EASY-ES则可以1:1轻松又简单还原复杂SQL!

# 架构 | Architecture
---

![Architecture](https://iknow.hs.net/27fb40b8-22d4-45c2-92e0-1471112d5102.jpg)

## 功能结构图 | Functional structure diagram
---
![Function](https://iknow.hs.net/5fad565b-8b4e-4274-ab59-a74c3492ac9d.png)

# 相关链接 | Links
---

- [Switch To English](https://gitee.com/easy-es/easy-es/blob/master/README_EN.md)
- [功能示例](https://gitee.com/dromara/easy-es/tree/master/easy-es-sample)
- [Springboot集成Demo](https://gitee.com/easy-es/easy-es-springboot-demo)

# Latest Version: [![Maven Central](https://img.shields.io/github/v/release/xpc1024/easy-es?include_prereleases&logo=xpc&style=plastic)](https://search.maven.org/search?q=g:io.github.xpc1024%20a:easy-*)
---
**Maven:**
``` xml
<dependency>
    <groupId>org.dromara.easy-es</groupId>
    <artifactId>easy-es-boot-starter</artifactId>
    <version>Latest Version</version>
</dependency>
```
**Gradle:**
```groovy
compile group: 'org.dromara.easy-es