背景


曾几何时,我也在幻想,开发者能不能不要浪费太多时间精力去学习各种产品不同的语法,毕竟人的精力和记忆都是有限的,浪费时间在这些差异上面,机会成本太高了,好不容易学会了,使用频率又不高,最后又忘了,一来一回何必呢?有这时间多陪陪家人不香吗?

后来梦成真了,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来了,搜索引擎可以如此简单相关推荐

  1. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...

    目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql ...

  2. es mysql 预处理_数据库选型之MySQL vs ElasticSearch

    前言 应用系统通常需要借助数据预处理(如物化视图等)来实现数据查询加速的需求.目前业界主流数据库主要有以下两大类,一种是基于传统RDBMS关系型数据库来实现:另一种是基于NoSQL非关系型数据库来实现 ...

  3. 离线安装docker,docker安装MySQL,Redis,ES,Kibana,mongoDB,RocketMQ

    目录 安装docker,docker-compose 离线安装docker,docker-compose 安装ElasticSearch 安装kibana 下载ik分词器. 安装MySQL 设置MyS ...

  4. MySQL数据库数据导入ES中

    需要安装 mysql数据导入ES中,用到的有logstash,ES,mysql的连接包.链接:https://pan.baidu.com/s/1xopMMUtPir12zrQfYcwBZg  提取码: ...

  5. Elasticsearch(一)——Es安装(三个必安工具、安装各种类型分词器)、Es 十大核心概念、通过 Kibana 操作 Es(中文分词、Es各种索引命令操作)

    Elasticsearch(一)--Es安装(三个必安工具.安装各种类型分词器).Es 十大核心概念.通过 Kibana 操作 Es(中文分词.Es各种索引命令操作) 一.Elasticsearch ...

  6. java读取ES配置生成ES管理类,获取ES连接

    java读取ES配置生成ES管理类,获取ES连接 1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询, ...

  7. 自建ES迁移至阿里云ES(使用脚本及logstash同步)

    搭建测试3节点ES集群,官网下载所需的版本进行解压运行,ECS与阿里云ES在同一地域可用区,并在相同的VPC内. # mkdir /usr/java # tar xvf jdk-8u162-linux ...

  8. 6.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)?ES中的关键词有哪些? 嘻哈的简写笔记——Elastic Search

    1.ES中什么是索引(ES中的索引指的是库)的分片和备份(副本)? 分片是对索引的切分存储:备份是对分片的备份: ES的服务中,可以创建多个索引(ES中的索引指的是库):每一个索引默认被分成5片存储: ...

  9. Rollup failed to resolve import “element-plus/es/components“ from “node_modules/element-plus/es/inde

    –> Rollup failed to resolve import "element-plus/es/components" from "node_modules ...

  10. es文件搜索不到win7服务器,es文件管理器,教您es文件浏览器怎么用

    手机已经成为了生活必需品,但是很多的用户都只是停留在表面,对手机有深入研究的用户就知道es文件浏览器是什么了,ES,全球主动下载超过3亿次,安卓文件管理第一品牌.更好地管理你的手机.平板.家里电脑和云 ...

最新文章

  1. python制作动态条形图-python – 动态更新matplotlib中的条形图
  2. CMS GC:CMS 废弃了,该怎么办呢?
  3. python列表教程:多个数列合并,合并后取值的方法
  4. 【牛客 - 185B】路径数量(离散数学,长度为k的路径数量,图)
  5. 如何用Chrome读懂网站监测Cookie
  6. jetson刷机遇到cuda装不了
  7. 监控Nginx负载均衡器脚本
  8. PHP cURL上传图片
  9. javascript div 没id_javascript原生自定义轮播图组件
  10. 常用开发资源整理(更新日:2017/4/26)
  11. OpenCV相机帧率低以及花屏问题
  12. 我在富士康挨踢了七年(十三.悉尼工作篇 )
  13. illegal TFTP operation
  14. 数据结构 找树根和孩子(树)
  15. 【懒懒的Python学习笔记二】
  16. HLSL 的基础知识
  17. 几个大学生实用的网站推荐
  18. Python加密word文档
  19. 别把激励员工变成收买员工
  20. 西雅图,夜未眠 2008-06-27

热门文章

  1. java db4o 教程_面向Java开发人员db4o指南:数组和集合 (1)
  2. 为什么你的种子磁力下载很慢?
  3. 参考文献引用格式实例
  4. psp能装安卓软件吗_PSP模拟器下载_安卓PSP模拟器下载「ppsspp模拟器」-太平洋下载中心...
  5. IBM Watson启示录:AI不应该仅仅是炫技
  6. iOS 蓝牙扫描设备注意 2021-10-12
  7. [4G+5G专题-145]: 一体化小基站- 5G小基站软件建议架构概述
  8. [转载]使用jquery实现用户名验证
  9. 数字孪生CIM智慧城市BIM,城市cim可视化解决方案公司
  10. Java 学生管理系统 GUI txt文件存储