分佈式架構之 EasyES

一、EasyES 是什麼?

Easy-Es(簡稱 EE)是一款基於 ElasticSearch(簡稱 Es) 官方提供的 RestHighLevelClient 打造的 ORM 開發框架,在 RestHighLevelClient 的基礎上, 只做增強不做改變,爲簡化開發、提高效率而生, 您如果有用過 Mybatis-Plus(簡稱 MP), 那麼您基本可以零學習成本直接上手 EE,EE 是 MP 的 Es 平替版, 在有些方面甚至比 MP 更簡單, 同時也融入了更多 Es 獨有的功能, 助力您快速實現各種場景的開發。

二、EasyES 的理念是什麼?

把簡單, 易用, 方便留給用戶, 把複雜留給框架。

三、EasyES 的願景是什麼?

讓天下沒有難用的 ES, 致力於成爲全球最受歡迎的 ElasticSearch 搜索引擎開發框架。

四、EasyES 的優勢有哪些?

  1. 全自動索引託管: 全球開源首創的索引託管模式, 開發者無需關心索引的創建更新及數據遷移等繁瑣步驟, 索引全生命週期皆可託管給框架, 由框架自動完成, 過程零停機, 用戶無感知, 徹底解放開發者。

  2. 屏蔽語言差異: 開發者只需要會 MySQL 語法即可使用 Es, 真正做到一通百通, 無需學習枯燥易忘的 Es 語法, Es 使用相對 MySQL 較低頻, 學了長期不用也會忘, 沒必要浪費這時間. 開發就應該專注於業務, 省下的時間去擼鐵, 去陪女朋友陪家人, 不做資本家的韭菜。

  3. 代碼量極少: 與直接使用 RestHighLevelClient 相比, 相同的查詢平均可以節省 3-5 倍左右的代碼量。

  4. 零魔法值: 字段名稱直接從實體中獲取, 無需輸入字段名稱字符串這種魔法值, 提高代碼可讀性, 杜絕因字段名稱修改而代碼漏改帶來的 Bug。

  5. 零額外學習成本: 開發者只要會國內最受歡迎的 Mybatis-Plus 語法, 即可無縫遷移至 EE,EE 採用和前者相同的語法, 消除使用者額外學習成本, 直接上手, 爽。

  6. 降低開發者門檻: Es 通常需要中高級開發者才能駕馭, 但通過接入 EE, 即便是隻瞭解 ES 基礎的初學者也可以輕鬆駕馭 ES 完成絕大多數需求的開發, 可以提高人員利用率, 降低企業成本。

五、EasyES 的特性有哪些?

  1. 無侵入: 只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑。

  2. 損耗小: 啓動即會自動注入基本 CURD,性能基本無損耗,直接面向對象操作。

  3. 強大的 CRUD 操作: 內置通用 Mapper,僅僅通過少量配置即可實現大部分 CRUD 操作,更有強大的條件構造器,滿足各類使用需求。

  4. 支持 Lambda 形式調用: 通過 Lambda 表達式,方便的編寫各類查詢條件,無需再擔心字段寫錯段。

  5. 支持主鍵自動生成: 支持 2 種主鍵策略,可自由配置,完美解決主鍵問題。

  6. 支持 ActiveRecord 模式: 支持 ActiveRecord 形式調用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作。

  7. 支持自定義全局通用操作: 支持全局通用方法注入( Write once, use anywhere )。

  8. 內置分頁插件: 基於 RestHighLevelClient 物理分頁,開發者無需關心具體操作,且無需額外配置插件,寫分頁等同於普通 List 查詢, 且保持和 PageHelper 插件同樣的分頁返回字段, 無需擔心命名影響。

9.MySQL 功能全覆蓋: MySQL 中支持的功能通過 EE 都可以輕鬆實現。

  1. 支持 ES 高階語法: 支持高亮搜索, 分詞查詢, 權重查詢, Geo 地理位置查詢, IP 查詢, 聚合查詢等高階語法。

  2. 良好的拓展性: 底層仍使用 RestHighLevelClient, 可保持其拓展性, 開發者在使用 EE 的同時, 仍可使用 RestHighLevelClient 的功能。

六、EasyES 的框架結構是怎樣的?

七、EasyES 有哪些應用場景?

ES 適用的地方,EasyES 同樣適用(基本上可滿足大多數的場景要求):

  1. 搜索文庫。

  2. 電商商品檢索。

  3. 海量系統日誌檢索。

  4. 在線智能客服。

  5. 機器人。

  6. 打車 app。

  7. 外賣 app。

  8. 社區團購配送。

  9. 陌生人社交。

八、關於 EasyES 的資料有哪些?

EasyES 官方網站:
https://www.easy-es.cn/

EasyES 官方文檔:
https://www.easy-es.cn/pages/ec7460/

Easy-Es 的 Gitee 倉庫:
https://gitee.com/dromara/easy-es

Easy-Es 的 Github 倉庫:
https://github.com/dromara/easy-es

開源不易,如果 EasyES 對你實際中應用 ES 有所幫助,不妨給個 star 鼓勵一下開源作者。

九、在 YC-Framework 中如何使用 EasyES?

1. 引入依賴

<dependency>
    <groupId>com.yc.framework</groupId>
    <artifactId>yc-common-easyes</artifactId>
</dependency>

2. 編寫數據實體

@Data
public class DocumentEntity {
    /**
     * es中的唯一id
     */
    private String id;
    /**
     * 文檔標題
     */
    private String title;
    /**
     * 文檔內容
     */
    private String content;
}

3. 編寫數據實體訪問 Mapper

@Repository
public interface DocumentMapper extends BaseEsMapper<DocumentEntity> {
}

4. 編寫 Controller

@RestController
public class DocumentController {
    @Autowired
    private DocumentMapper documentMapper;
    @GetMapping("/add")
    public void test() {
        // 測試插入數據
        DocumentEntity document = new DocumentEntity();
        document.setTitle("Hello");
        document.setContent("Hello Easy ES");
        int successCount = documentMapper.insert(document);
        System.out.println(successCount);
    }
    @GetMapping("/query")
    public DocumentEntity query() {
        // 測試查詢
        String title = "Hello";
        LambdaEsQueryWrapper<DocumentEntity> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(DocumentEntity::getTitle, title);
        DocumentEntity document = documentMapper.selectOne(wrapper);
        System.out.println(document);
        return document;
    }
}

相關示例已上傳至 Github:
https://github.com/developers-youcong/yc-framework/tree/main/yc-example/yc-example-easyes

YC-Framework 官網:
https://framework.youcongtech.com/

YC-Framework Github 源代碼:
https://github.com/developers-youcong/yc-framework

YC-Framework Gitee 源代碼:
https://gitee.com/developers-youcong/yc-framework

以上源代碼均已開源,開源不易,如果對你有幫助,不妨給個 star!!!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/AocM1v1xWN7mnp1BPHuvSQ