前言:
今天咱们对“基于es的搜索引擎”大约比较讲究,各位老铁们都需要剖析一些“基于es的搜索引擎”的相关知识。那么小编同时在网上搜集了一些关于“基于es的搜索引擎””的相关内容,希望朋友们能喜欢,大家快快来了解一下吧!《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的 Easy-Es是一款简化ElasticSearch搜索引擎操作的开源框架,简化CRUD操作,可以更好的帮助开发者减轻开发负担。
项目简介
Easy-Es(简称EE)是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的低码开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可以零学习成本直接上手EE,EE是MP的Es平替版,同时也融入了更多Es独有的功能,助力您快速实现各种场景的开发。
项目特性无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper,仅仅通过少量配置即可实现大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错段支持主键自动生成:支持2 种主键策略,可自由配置,完美解决主键问题支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )内置分页插件:基于RestHighLevelClient 物理分页,开发者无需关心具体操作,且无需额外配置插件,写分页等同于普通 List 查询,且保持和PageHelper插件同样的分页返回字段,无需担心命名影响MySQL功能全覆盖: MySQL中支持的功能通过EE都可以轻松实现支持ES高阶语法: 支持高亮搜索,分词查询,权重查询,聚合查询等高阶语法良好的拓展性:底层仍使用RestHighLevelClient,可保持其拓展性,开发者在使用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必须的相关配置:
easy-es: enable: true #默认为true,若为false则认为不启用本框架 address : 127.0.0.1:9200 # es的连接地址,必须含端口 若为集群,则可以用逗号隔开 例如:127.0.0.1:9200,127.0.0.2:9200 username: elastic #若无 则可省略此行配置 password: WG7WVmuNMtM4GwNYkyWH #若无 则可省略此行配置
其它配置暂可省略,后面有章节详细介绍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对象中新增了创建时间字段,更新了索引,并新增了两条数据 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); }
高亮查询
// 不指定高亮标签,默认采用<em></em>返回高亮内容highLight(高亮字段);// 指定高亮标签highLight(高亮字段,开始标签,结束标签)
@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); }
更多内容:
标签: #基于es的搜索引擎 #基于es的搜索引擎有哪些 #基于es的搜索引擎有哪些方法