《開源精選》是我們分享Github、Gitee等開源社區(qū)中優(yōu)質(zhì)項目的欄目,包括技術(shù)、學(xué)習(xí)、實用與各種有趣的內(nèi)容。本期推薦的 Easy-Es是一款簡化ElasticSearch搜索引擎操作的開源框架,簡化CRUD操作,可以更好的幫助開發(fā)者減輕開發(fā)負(fù)擔(dān)。
項目簡介
Easy-Es(簡稱EE)是一款基于ElasticSearch(簡稱Es)官方提供的RestHighLevelClient打造的低碼開發(fā)框架,在 RestHighLevelClient 的基礎(chǔ)上,只做增強不做改變,為簡化開發(fā)、提高效率而生,您如果有用過Mybatis-Plus(簡稱MP),那么您基本可以零學(xué)習(xí)成本直接上手EE,EE是MP的Es平替版,同時也融入了更多Es獨有的功能,助力您快速實現(xiàn)各種場景的開發(fā)。
項目特性
- 無侵入:只做增強不做改變,引入它不會對現(xiàn)有工程產(chǎn)生影響,如絲般順滑
- 損耗小:啟動即會自動注入基本 CURD,性能基本無損耗,直接面向?qū)ο蟛僮?/li>
- 強大的 CRUD 操作:內(nèi)置通用 MApper,僅僅通過少量配置即可實現(xiàn)大部分 CRUD 操作,更有強大的條件構(gòu)造器,滿足各類使用需求
- 支持 Lambda 形式調(diào)用:通過 Lambda 表達(dá)式,方便的編寫各類查詢條件,無需再擔(dān)心字段寫錯段
- 支持主鍵自動生成:支持2 種主鍵策略,可自由配置,完美解決主鍵問題
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式調(diào)用,實體類只需繼承 Model 類即可進行強大的 CRUD 操作
- 支持自定義全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 內(nèi)置分頁插件:基于RestHighLevelClient 物理分頁,開發(fā)者無需關(guān)心具體操作,且無需額外配置插件,寫分頁等同于普通 List 查詢,且保持和PageHelper插件同樣的分頁返回字段,無需擔(dān)心命名影響
- MySQL功能全覆蓋: MySQL中支持的功能通過EE都可以輕松實現(xiàn)
- 支持ES高階語法: 支持高亮搜索,分詞查詢,權(quán)重查詢,聚合查詢等高階語法
- 良好的拓展性:底層仍使用RestHighLevelClient,可保持其拓展性,開發(fā)者在使用EE的同時,仍可使用RestHighLevelClient的功能
快速開始
添加依賴
<dependency>
<groupId>com.xpc</groupId>
<artifactId>easy-es-boot-starter</artifactId>
<version>Latest Version</version>
</dependency>
Gradle:
compile group: 'com.github.xpc1024', name: 'easy-es-boot-starter', version: 'Latest Version'
配置
在 application.yml 配置文件中添加EasyEs必須的相關(guān)配置:
easy-es:
enable: true #默認(rèn)為true,若為false則認(rèn)為不啟用本框架
address : 127.0.0.1:9200 # es的連接地址,必須含端口 若為集群,則可以用逗號隔開 例如:127.0.0.1:9200,127.0.0.2:9200
username: elastic #若無 則可省略此行配置
password: WG7WVmuNMtM4GwNYkyWH #若無 則可省略此行配置
其它配置暫可省略,后面有章節(jié)詳細(xì)介紹EasyEs的配置
在 Spring Boot 啟動類中添加 @EsMapperScan 注解,掃描 Mapper 文件夾:
@SpringBootApplication
@EsMapperScan("com.xpc.easyes.sample.mapper")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
高階語法
排序
針對字段的排序,支持升序排序和降序排序:
// 降序排列
wrapper.orderByDesc(排序字段,支持多字段)
// 升序排列
wrapper.orderByAsc(排序字段,支持多字段)
使用示例:
@Test
public void testSort(){
// 測試排序 為了測試排序,我們在Document對象中新增了創(chuàng)建時間字段,更新了索引,并新增了兩條數(shù)據(jù)
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
wrapper.likeRight(Document::getContent,"1111");
wrapper.select(Document::getTitle,Document::getGmtCreate);
List<Document> before = documentMapper.selectList(wrapper);
System.out.println("before:"+before);
wrapper.orderByDesc(Document::getGmtCreate);
List<Document> desc = documentMapper.selectList(wrapper);
System.out.println("desc:"+desc);
}
高亮查詢
// 不指定高亮標(biāo)簽,默認(rèn)采用<em></em>返回高亮內(nèi)容
highLight(高亮字段);
// 指定高亮標(biāo)簽
highLight(高亮字段,開始標(biāo)簽,結(jié)束標(biāo)簽)
@Test
public void testHighlight() throws IOException {
LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
String keyword = "11111";
wrapper.match(Document::getContent,keyword);
wrapper.highLight(Document::getContent);
SearchResponse response = documentMapper.search(wrapper);
System.out.println(response);
}
更多內(nèi)容:https://gitee.com/easy-es/easy-es