Easy-Es介绍

Easy-Es是一款由国内开发者打造并完全开源的ElasticSearch-ORM框架
采用和Mybatis-Plus一致的语法设计,能够显著降低ElasticSearch搜索引擎使用门槛,和额外学习成本,并大幅减少开发者工作量,总之非常牛皮。

详细的介绍及功能 可前往官网翻阅
官网地址: Easy-Es

Spring-Boot中的使用

废话不多说,直接上代码
首先要有一个Spring-Boot项目啦,过于简单,直接跳过

Pom.xml

说明

要在Spring-Boot中排除默认的es依赖坐标,因为默认的es版本可能和Easy-Es不匹配,导致启动失败

xml 复制代码
<properties>
    <spring-boot.version>2.7.9</spring-boot.version>
    <elasticsearch.version>7.14.0</elasticsearch.version>
    <easy-es.version>2.0.0-beta4</easy-es.version>
</properties> 
<dependencyManagement>
        <dependencies>
            <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
                <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>

            <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>
            <dependency>
                <groupId>org.dromara.easy-es</groupId>
                <artifactId>easy-es-boot-starter</artifactId>
                <version>${easy-es.version}</version>
            </dependency>
     	</dependencies>
 </dependencyManagement>

applicaton.yml

说明

Easy-Es的配置信息

yml 复制代码
--- # easy-es 配置
easy-es:
  enable: true # 默认为true,若为false时,则认为不启用本框架
  address: 192.168.52.130:9200  #填你的es连接地址
  username: elastic
  password: 123456
  # 心跳策略时间 单位:ms
  keep-alive-millis: 18000
  # 连接超时时间 单位:ms
  connectTimeout: 5000
  # 通信超时时间 单位:ms
  socketTimeout: 5000
  # 连接请求超时时间 单位:ms
  connectionRequestTimeout: 5000
  # 最大连接数 单位:个
  maxConnTotal: 100
  # 最大连接路由数 单位:个
  maxConnPerRoute: 100
  global-config:
    # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能
    print-dsl: true
    # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快
    asyncProcessIndexBlocking: true
    db-config:
      # 是否开启下划线转驼峰 默认为false
      map-underscore-to-camel-case: true
      # id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成
      id-type: customize
      # 字段更新策略 默认为not_null
      field-strategy: not_null
      # 默认开启,查询若指定了size超过1w条时也会自动开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响.
      enable-track-total-hits: true
      # 数据刷新策略,默认为不刷新
      refresh-policy: immediate

Application启动类

说明

在启动类上添加包扫描工具

java 复制代码
@SpringBootApplication
@EsMapperScan("com.an.**.esmapper")
public class AnnApplication {

    public static void main(String[] args) {
        System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication application = new SpringApplication(AnnApplication.class);
        application.setApplicationStartup(new BufferingApplicationStartup(2048));
        application.run(args);
        System.out.println("(♥◠‿◠)ノ゙  Ann-Blog-Plus启动成功   ლ(´ڡ`ლ)゙");
    }

}

EsDemoMapper接口

说明

可以看到这个接口的包路径就是和包扫描对应的,接口的结构也是和MyBatis-Plus类似的,BaseEsMapper中封装了大量的方法,方便我们直接使用

java 复制代码
package com.an.demo.esmapper;

import com.an.demo.domain.Document;
import org.dromara.easyes.core.core.BaseEsMapper;

/**
 * Es博客文章映射器
 *
 * @author: ANH
 * @createDate: 2024/03/10
 * @version: 1.0.0
 */
public interface EsDemoMapper extends BaseEsMapper<Document> {

}

Document类

说明

实体类中也是和Mp类似,@IndexName类似于@TableName,意思是此实体类对应的索引名称,@IndexId类似于@TableId ....,不再赘述

java 复制代码
package com.an.demo.domain;

import lombok.Data;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;

/**
 * ES数据模型
 *
 *
 * 
 * 
 * 
 * Copyright © 2021 xpc1024 All Rights Reserved
 *
 * @author ANH
 * @date 2024/06/01
 */
@Data
@IndexName("document")
public class Document {
    /**
     * es中的唯一id
     */
    @IndexId
    private String id;

    /**
     * 文档标题
     */

    private String title;
    /**
     * 文档内容
     */
    private String content;

    private String[] tags;
}

EsDemoController类

说明

控制层中有创建索引,新增索引数据,条件查询三个接口

java 复制代码
package com.an.demo.controller;

import cn.dev33.satoken.annotation.SaIgnore;
import com.an.common.core.domain.R;
import com.an.demo.domain.Document;
import com.an.demo.esmapper.EsDemoMapper;
import lombok.RequiredArgsConstructor;
import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Es演示控制器
 *
 * @author: ANH
 * @createDate: 2024/03/10
 * @version: 1.0.0
 */
@RequiredArgsConstructor
@RestController
@RequestMapping("/demo/es")
@SaIgnore
public class EsDemoController {

    private final EsDemoMapper esDemoMapper;



    /**
     * 创建索引
     *
     * @return {@link R }
     * @author: ANH
     * @createDate: 2024/03/10
     * @version: 1.0.0
     */
    @GetMapping("/createIndex")
    public R createIndex() {
        esDemoMapper.createIndex();
        return R.ok();
    }

    /**
     * 加
     *
     * @return {@link R }
     * @author ANH
     * @date 2024/06/01
     */
    @GetMapping("/addByEasyEs")
    public R add() {
        List documents =  buildData();
        Integer i = esDemoMapper.insertBatch(documents);
        return R.ok(i);
    }

    private List buildData() {
        List documents = new ArrayList();
        // 创建第一条数据
        Document document1 = new Document();
        document1.setId("124");
        document1.setContent("这是第二篇博客的内容");
        String[] tags1 = {"python", "数据分析", "机器学习"};
        document1.setTags(tags1);

// 创建第二条数据
        Document document2 = new Document();
        document2.setId("125");
        document2.setContent("今天天气真好,适合出去运动");
        String[] tags2 = {"健身", "跑步", "户外运动"};
        document2.setTags(tags2);

// 创建第三条数据
        Document document3 = new Document();
        document3.setId("126");
        document3.setContent("新产品发布会即将召开,敬请期待");
        String[] tags3 = {"新品", "发布会", "科技"};
        document3.setTags(tags3);

// 创建第四条数据
        Document document4 = new Document();
        document4.setId("127");
        document4.setContent("明天放假了,准备去旅行放松一下");
        String[] tags4 = {"度假", "旅游", "休闲"};
        document4.setTags(tags4);
        documents.add(document1);
        documents.add(document2);
        documents.add(document3);
        documents.add(document4);
        return documents;
    }

    /**
     * 选择列表
     *
     * @return {@link R }
     * @author ANH
     * @date 2024/06/01
     */
    @GetMapping("/selectListByEasyEs")
    public R selectList() {
        List list = Arrays.asList("度假", "科技");
        LambdaEsQueryWrapper esQueryWrapper = new LambdaEsQueryWrapper()
            .in(Document::getTags, list).and(wr->wr.like(Document::getContent,"放假"));
        List documents = esDemoMapper.selectList(esQueryWrapper);
        return R.ok(documents);
    }


}

结果

创建索引并新增数据后

es中存在数据
a65f6a6deeab40d892da5446fbfc22f1.png

查询不带条件时

f2bc122b76ad4aa4aade85c8a29b53e1.png

查询带条件时

d42710bb82ce40c7a23899a3216036f8.png

目录

Total Likes
2
Total Comments
2