【ES】MySQL语法版的ES来了,搜索引擎可以如此简单
背景
????????曾幾何時,我也在幻想,開發者能不能不要浪費太多時間精力去學習各種產品不同的語法,畢竟人的精力和記憶都是有限的,浪費時間在這些差異上面,機會成本太高了,好不容易學會了,使用頻率又不高,最后又忘了,一來一回何必呢?有這時間多陪陪家人不香嗎?
????????后來夢成真了,Hibernate,JPA,Mybatis-plus等眾多框架幫我們屏蔽了不同數據庫語言的差異性,更提供了大量開箱即用的方法,幫開發者節省了大量時間,用下來體驗非常好,受此啟發,我開始著手開發一款類似的開源框架:Easy-Es,截止目前,市面上關于Es的開源框架少之又少,尚未有類似框架,究其原因主要是由于Es本身門檻較高,且在很多項目中未必會用到,所以很少有人愿意花精力去搞一款用戶群體較少的框架吧,另外Es官方也提供了一款功能無比強大的腳手架:RestLowLevelClient和RestHighLevelClient,用上它之后,還有多少人愿意再去封裝更好用的框架? 但筆者在使用過程中發現官方提供的框架雖然功能強大,但用起來體驗卻并不太友好,仍存在如下幾個痛點亟需解決:
- 需要學會Es的語法才能使用
- 代碼中的查詢字段名稱需要使用魔法值
- 即便是很簡單的功能,調用和解析Response時仍需要大量代碼,對開發者不太友好
- ...
? ? ? ? 這些痛點也引起了廣大開發者的共鳴,為了解決如上困擾,Easy-ES應用而生,底層仍采用官方提供的RestHighLevelClient,保障其原生性能和拓展性,API層采用目前國內最受歡迎的Mybatis-Plus語法,保持和它一樣的語法和功能,盡量減少開發者的額外學習成本,確保開發者可以光速上手.
簡介
Easy-Es(簡稱EE)是一款基于ElasticSearch(簡稱Es)官方提供的RestHighLevelClient打造的低碼開發框架,在 RestHighLevelClient 的基礎上,,只做增強不做改變,為簡化開發、提高效率而生,可以把它當做Mybatis-Plus的Es版.
優勢
- 屏蔽語言差異:開發者只需要會MySQL語法即可使用Es,真正做到一通百通,無需學習枯燥易忘的Es語法,Es使用相對MySQL較低頻,學了長期不用也會忘,沒必要浪費這時間.開發就應該專注于業務,省下的時間去擼鐵,去陪女朋友陪家人,不做資本家的韭菜
- 極少的代碼量: 與直接使用RestHighLevelClient相比,相同的查詢平均可以節省3-5倍左右的代碼量
- 零魔法值:字段名稱直接從實體中獲取,無需輸入字段名稱字符串這種魔法值,提高代碼可讀性,杜絕因字段名稱修改而代碼漏改帶來的Bug
- 零額外學習成本:開發者只要會國內最受歡迎的Mybatis-Plus語法,即可無縫遷移至EE,EE采用和前者相同的語法,消除使用者額外學習成本,直接上手,爽
- 降低開發者門檻: Es通常需要中高級開發者才能駕馭,但通過接入EE,即便是只了解ES基礎的初學者也可以輕松駕馭ES完成絕大多數需求的開發,可以提高人員利用率,降低企業成本
對比
需求:查詢出文檔標題為 "中國功夫"且作者為"老漢"的所有文檔
// 使用Easy-Es僅需3行代碼即可完成查詢 LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); wrapper.eq(Document::getTitle, "中國功夫").eq(Document::getCreator, "老漢"); List<Document> documents = documentMapper.selectList(wrapper); // 傳統方式, 直接用RestHighLevelClient進行查詢 需要11行代碼,還不包含解析JSON代碼 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); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(boolQueryBuilder); searchRequest.source(searchSourceBuilder); try {SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);// 然后從searchResponse中通過各種方式解析出DocumentList 省略這些代碼...} catch (IOException e) {e.printStackTrace();}- 以上只是簡單查詢演示,實際使用場景越復雜,效果就越好,平均可節省3-5倍代碼量
- 傳統功夫,點到為止!上述功能僅供演示,僅為Easy-Es支持功能的冰山一角
項目地址
GitHub
碼云 (推薦,打開更快)
文檔
中文文檔
EnglishDocumen
結語
盡管目前Easy-Es目前開源不久,但由于站在巨人的肩膀上(RestHighLevelClient和Mybatis-Plus),這是一款出道即巔峰的框架,這么說并不是說它寫得有多好,而是它融合了兩款目前非常優秀框架的優點,這決定了它起點的高度,截止目前項目已迭代6個版本,且首版已走完Mybatis-Plus耗時數年才走完的路,項目仍在高速發展中,已經被Gitee官方推薦,占據每日,每周熱搜榜首,收到大量Star和好評,未來希望有更多人加入我們,一起完善 Easy-Es,如果您也覺得Easy-Es框架不錯,不妨花幾秒鐘時間幫作者在Gitee或github上點亮小星星?,讓更多人看到本框架,感謝大家!
彩蛋
- github網頁打不開或者打開慢?
? ? ? ? ? Windows系統打開 C:\Windows\System32\drivers\etc
? ????????Mac可以在/etc/ 目錄下找到hosts文件
? ????????找到后編輯hosts文件,加入如下配置:?
140.82.113.4 github.com 199.232.69.194 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com 185.199.110.153 assets-cdn.github.com 185.199.111.153 assets-cdn.github.com參考文檔:知乎-如何解決Github打不開或打開過慢的問題
- 需要健身計劃?
? ? ? ??健身計劃一鍵生成系統
? ? ? ? 截止目前我已健身8年,私教經驗2年,曾獲500Fit全國大學生健體比賽優秀獎,該系統是我在三年前開源的一款系統,將人群細分為108類,按照個人意愿準一對一定制的健身計劃,包含飲食,作息,訓練等全方位計劃,助力您早日收獲好身材.另外,如果大家有頸椎不適,也可以通過我在Gitee中留的聯系方式,留言此篇文檔,并注明來源CSDN,即可免費領取一份頸椎保護的PPT,早學早受益!
總結
以上是生活随笔為你收集整理的【ES】MySQL语法版的ES来了,搜索引擎可以如此简单的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android mmkv使用_腾讯开源存
- 下一篇: 在一个list中增加一个节点