一款简化ElasticSearch搜索引擎操作的开源框架

发布一下 0 0

简介

Easy-Es是一款简化ElasticSearch搜索引擎操作的开源框架,简化CRUD操作,可以更好的帮助开发者减轻开发负担

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


优点

  • 屏蔽语言差异: 开发者只需要会MySQL语法即可使用Es
  • 代码量极少: 与直接使用RestHighLevelClient相比,相同的查询平均可以节3-5倍左右的代码量
  • 零魔法值: 字段名称直接从实体中获取,无需输入字段名称字符串这种魔法值
  • 零额外学习成本: 开发者只要会国内最受欢迎的Mybatis-Plus语法,即可无缝迁移至Easy-Es
  • 降低开发者门槛: 即便是只了解ES基础的初学者也可以轻松驾驭ES完成绝大多数需求的开发
  • 功能强大: 支持MySQL的几乎全部功能,且对ES特有的分词,权重,高亮,地理位置Geo等功能都支持
  • 完善的中英文文档: 提供了中英文双语操作文档,文档全面可靠,帮助您节省更多时间


适用场景

  1. 检索类服务
  • 搜索文库
  • 电商商品检索
  • 海量系统日志检索
一款简化ElasticSearch搜索引擎操作的开源框架

  1. 问答类服务(本质上也是检索类)
  • 在线智能客服
  • 机器人
一款简化ElasticSearch搜索引擎操作的开源框架

  1. 地图类服务
  • 打车app
  • 外卖app
  • 社区团购配送
  • 陌生人社交
一款简化ElasticSearch搜索引擎操作的开源框架

...

以上只是我个人能想到的一些应用场景,实际上Easy-Es的API基本上覆盖了Elastic Search 90%以上的功能,99%以上的常用功能,所以您可以基于EE快速构建出各种系统,即便是十分复杂多变的查询,也可以从容应对,

SpringBoot集成

Pom依赖

一款简化ElasticSearch搜索引擎操作的开源框架

核心代码


一款简化ElasticSearch搜索引擎操作的开源框架


一款简化ElasticSearch搜索引擎操作的开源框架

如何使用混合查询?

在我没提供此篇文档时,尽管我提供了混合查询的API和简单介绍,但很多人还不知道有此功能,更不知道该如何使用,所以这里我以一个具体的案例,给大家演示如何使用混合查询,供大家参考,主公们别担心篇幅多,其实非常非常简单,只是我教程写的细.


背景:用户"向阳"微信向我反馈,说目前EE尚不支持查询按照距给定点的位置由近及远排序.

实际开发中,此场景可以被应用到打车时"乘客下单,要求优先派单给周围3公里内离我最近的司机",然后该乘客是个美女,担心自身安全问题,又多加了几个要求,比如司机必须是女性,驾龄大于3年,商务型车子等...


以上面打车的场景为例,我们来看下用EE怎么查询?上面查询可以分为两部分

  • EE支持的常规查询:如周围3公里内,司机性别为女,查询驾龄>=3年...
  • EE不支持的非常规查询:按照复杂的排序规则排序(目前EE仅支持常规字段的升序/降序排序)

对于支持的部分,我们可以直接调用EE,由EE先构建一个SearchSourceBuilder出来

// 假设该乘客所在位置经纬度为 31.256224D, 121.462311DLambdaEsQueryWrapper<Driver> wrapper = new LambdaEsQueryWrapper<>();wrapper.geoDistance(Driver::getLocation, 3.0, DistanceUnit.KILOMETERS, new GeoPoint(31.256224D, 121.462311D));       .eq(Driver::getGender,"女"")       .ge(Driver::getDriverAge,3)       .eq(Driver::getCarModel,"商务车");SearchSourceBuilder searchSourceBuilder = driverMapper.getSearchSourceBuilder(wrapper);

对于不支持的语句,可以继续用RestHighLevelClient的语法进行封装,封装好了,直接调用EE提供的原生查询接口,就可以完成整个查询.

SearchRequest searchRequest = new SearchRequest("索引名");// 此处的searchSourceBuilder由上面EE构建而来,我们继续对其追加排序参数searchSourceBuilder.sort(        new GeoDistanceSortBuilder("location", 31.256224D, 121.462311D)                 .order(SortOrder.DESC)                 .unit(DistanceUnit.KILOMETERS)                 .geoDistance(GeoDistance.ARC));searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = driverMapper.search(searchRequest, RequestOptions.DEFAULT);


如此您便可以既享受到了EE帮您生成好的基本查询,又可完成EE暂未支持的功能,只需要不太多的代码(相比直接RestHighLevelClient,仍能节省大量代码)就可以达成您的目标,和当下纯电动汽车尚未完全发展成熟下的一种折中方案---油电混动有着异曲同工之妙.


当然,如果您不习惯使用这种模式,您仍可以直接使用原生查询,所以您大可以无忧无虑的使用EE,我们已经为您想好了各种兜底的方案和退路,无忧售后!如果您也认可这种模式,不妨给作者点个赞吧,为了让EE的用户爽,作者那糟老头子可谓是煞费苦心!


想要学习这款源码,请记得关注+私信+转发

私信回复【简单ES

版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除

本文地址:http://0561fc.cn/75143.html