Easy-Es笔记

Easy-Es笔记一 Easy ES 概述 Easy Es 简称 EE 是一款由国内开发者打造并完全开源的 ElasticSearc ORM 框架 在原生 RestHighLeve 的基础上 只做增强不做改变 为简化开发 提高效率而生 Easy Es 采用和 MP 一致的语法设计

大家好,我是讯享网,很高兴认识大家。

一、Easy-ES概述


Easy-Es(简称EE)是一款由国内开发者打造并完全开源的ElasticSearch-ORM框架。在原生 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生。Easy-Es采用和MP一致的语法设计,降低ElasticSearch搜索引擎使用门槛,和额外学习成本,并大幅减少开发者工作量,帮助企业降本提效。在有些方面甚至比MP更简单,同时也融入了更多ElasticSearch独有的功能,助力您快速实现各种场景的开发。(也可以理解为是操作es的mp)

在这里插入图片描述
讯享网

官网地址:https://www.easy-es.cn/

项目地址:https://gitee.com/dromara/easy-es/

开源社区:https://gitee.com/dromara/


EE特性:

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper,仅仅通过少量配置即可实现大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错段。
  • 支持主键自动生成:支持2 种主键策略,可自由配置,完美解决主键问题。
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作。
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )。
  • 内置分页插件:基于RestHighLevelClient 物理分页,开发者无需关心具体操作,且无需额外配置插件,写分页等同于普通 List 查询,且保持和PageHelper插件同样的分页返回字段,无需担心命名影响。
  • MySQL功能全覆盖:MySQL中支持的功能通过EE都可以轻松实现。
  • 支持ES高阶语法:支持高亮搜索,分词查询,权重查询,Geo地理位置查询,IP查询,聚合查询等高阶语法。
  • 良好的拓展性:底层仍使用RestHighLevelClient,可保持其拓展性,开发者在使用EE的同时,仍可使用RestHighLevelClient的功能。

EE框架结构:

在这里插入图片描述

EE与Spring Data ES技术对比:

在这里插入图片描述


二、Easy-ES快速入门

1、创建maven工程

2、引入依赖:

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <!-- springboot工程 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>cn.aopmin</groupId> <artifactId>EE-demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--es相对稳定版本,esay-es会依赖这个版本的jar包--> <elasticsearch.version>7.14.0</elasticsearch.version> </properties> <dependencies> <!-- web,排除springboot内置的es依赖,以防和easy-es中的依赖冲突 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> </exclusion> <exclusion> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </exclusion> </exclusions> </dependency> <!-- elasticsearch --> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>${elasticsearch.version}</version> </dependency> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>${elasticsearch.version}</version> </dependency> <!-- easy-es --> <dependency> <groupId>org.dromara.easy-es</groupId> <artifactId>easy-es-boot-starter</artifactId> <version>2.0.0-beta3</version> </dependency> <!-- junit --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <!--打包插件--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 

讯享网

在这里插入图片描述

3、创建启动类:

讯享网package cn.aopmin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class EEApplication { 
    public static void main(String[] args) { 
    SpringApplication.run(EEApplication.class, args); } } 

4、在application.yml中配置easy-es:

easy-es: address: 192.168.150.123:9200 # username: XXXX #如果es无账号密码则可不配置此行 # password: XXXX #如果es无账号密码则可不配置此行 

5、创建实体类:

讯享网package cn.aopmin.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.dromara.easyes.annotation.IndexField; import org.dromara.easyes.annotation.IndexId; import org.dromara.easyes.annotation.IndexName; import org.dromara.easyes.annotation.rely.Analyzer; import org.dromara.easyes.annotation.rely.FieldType; import org.dromara.easyes.annotation.rely.IdType; / * ES实体类 * * @author 白豆五 * @version 2023/07/26 * @since JDK8 */ @Data @AllArgsConstructor @NoArgsConstructor @IndexName("document") // 指定索引名称 public class Document { 
    / * es中的唯一id */ @IndexId(type = IdType.CUSTOMIZE) //id生成策略为自定义 private String id; / * 文档标题 */ @IndexField( fieldType = FieldType.TEXT, analyzer = Analyzer.IK_MAX_WORD, searchAnalyzer = Analyzer.IK_SMART) private String title; / * 文档内容 */ @IndexField( fieldType = FieldType.KEYWORD) private String content; } 

6、创建mapper接口:

package cn.aopmin.mapper; import cn.aopmin.pojo.Document; import org.dromara.easyes.core.core.BaseEsMapper; / * Mapper接口 * * @author 白豆五 * @version 2023/07/26 * @since JDK8 */ public interface DocumentMapper extends BaseEsMapper<Document> { 
    } 

7、在启动类上配置包扫描:(@EsMapperScan)

讯享网package cn.aopmin; import org.dromara.easyes.starter.register.EsMapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @EsMapperScan("cn.aopmin.mapper") // 指定Mapper接口所在的包名 @SpringBootApplication public class EEApplication { 
    public static void main(String[] args) { 
    SpringApplication.run(EEApplication.class, args); } } 

8、测试

示例1:创建索引库

package cn.aopmin.test; import cn.aopmin.mapper.DocumentMapper; import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; import javax.annotation.Resource; / * EasyEs快速入门测试类 * * @author 白豆五 * @version 2023/07/26 * @since JDK8 */ @SpringBootTest public class EasyEsTest { 
    @Resource private DocumentMapper documentMapper; / * 测试创建索引库 */ @Test public void testCreateIndex() { 
    //创建索引,根据当前mapper对应实体类信息及其注解配置生成索引信息 Boolean success = documentMapper.createIndex(); System.out.println(success ? "创建索引成功" : "创建索引失败"); } } 

在这里插入图片描述

在这里插入图片描述


示例2:添加文档

讯享网/ * 测试添加文档 */ @Test public void testAddDocument() { 
    // 持久层添加数据跟mp类似也是insert方法 documentMapper.insert(new Document("1", "程序员的幽默", "为了让你开心,我特意编写了一段关于程序员的小笑话,希望你能喜欢。")); } 

在这里插入图片描述


示例3:测试查询标题中包含程序员的文档列表(就连解析结果的活都帮我们做了)

/ * 测试查询title中包含程序员的文档列表 */ @Test public void testSearch() { 
    // 条件构造器 LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>(); wrapper.eq(Document::getTitle, "程序"); // 类似match查询 // 查询文档列表 List<Document> list = documentMapper.selectList(wrapper); list.forEach(System.out::println); } 

在这里插入图片描述

小讯
上一篇 2025-03-03 10:24
下一篇 2025-02-14 20:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/52812.html