Easy-es太绝了 妈妈再也不用担心我不会用es了

简介

为什么要是用Easy-es

在开发的过程中,目前有原生的es的依赖,以及springboot整合es依赖可以使用,但是对于复杂的es查询场景,编写起来会比较麻烦,而Easy-es就是为了让我们编写变得更加的"easy"从而诞生的,本人在实际场景中使用。

类比于mybatis与Mybatis-plus,Mybatis-plus的封装,让我们编写查询方法更加的便捷。

官方解释

Easy-es,类似于mybatisplus,是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架,在 RestHighLevelClient 的基础上,只做增强不做改变,为简化开发、提高效率而生

具体的不讲太多,主要是讲应用,详细的可以看看官网

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

Springboot整合Easy-es

背景案例

有个告警表、其中有字段id、主题、时间、设备号

引入依赖

 <!-- 引入easy-es最新版本的依赖-->
        <dependency>
            <groupId>org.dromara.easy-es</groupId>
            <artifactId>easy-es-boot-starter</artifactId>
            <!--这里Latest Version是指最新版本的依赖,比如2.0.0,可以通过下面的图片获取-->
            <version>2.0.0</version>
        </dependency>

        <!-- 排除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>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.14.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.14.0</version>
        </dependency>

yaml配置

easy-es:
  enable: true #默认为true,若为false则认为不启用本框架
  address : 127.0.0.1:19200 # es的连接地址,必须含端口 若为集群,则可以用逗号隔开 例如:127.0.0.1:9200,127.0.0.2:9200
  username: elastic #若无 则可省略此行配置
  password: elastic #若无 则可省略此行配置
  
# 日志配置 可以查看DSL,方便验证
logging:
  level:
    tracer: trace # 开启trace级别日志,在开发时可以开启此配置,则控制台可以打印es全部请求信息及DSL语句,为了避免重复,开启此项配置后,可以将EE的print-dsl设置为false.

  • 至于es的安全配置(账号密码)等可以查看往期文章

https://mp.weixin.qq.com/s/e-JgJeOLwsJGxlYGlnnnNw?token=642004887&lang=zh_CN

创建索引类/实体类

一般是在我们的数据库的实体类中使用即可

package com.walker.es.model;

import lombok.Data;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.Settings;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldType;

@Data
//索引名、别名
@IndexName(value = "alarm_record",aliasName = "alarm")
//可配置索引分片数、索引副本数、默认最大返回数、索引的刷新间隔
//也可以自定义settings提供类 默认为DefaultSettingsProvider空实现 如需自定义,可继承此类并覆写getSettings方法 将settings信息以Map返回
@Settings(shardsNum = 2, replicasNum = 2)
public class AlarmRecordEntity {
   

//    需要使用多一个id,用于标识es的id,不要跟数据库的id 混在一起,否则会无法搜索出id
    @IndexId
    private String esId;

//    数据库的主键id,建议与es的自动生成的id分开,命名的时候也不要取id,否则在搜索的时候会搜索不出 
//    如果使用keyword和string  排序的时候 会第一个数字大的排前面,也就是9会排前面  这是有问题的
//    因此 如果数据库id的字段使用String的时候 fieldType可以使用Long
//    如果使用Long类型,则使用keyword则meiwenti 
    @IndexField(value = "sqlId",fieldType = FieldType.KEYWORD)
    private Long sqlId;

//    需要对类型为text或keyword_tex字段聚合时,可指定其fieldData=true,否则es会报错
//    中文分词器  analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD
    @IndexField(fieldType = FieldType.TEXT,fieldData = true, analyzer = Analyzer.IK_SMART, searchAnalyzer = Analyzer.IK_MAX_WORD )
    private String titile;


//    日期类型
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis")
    private String time;

    @IndexField(fieldType = FieldType.KEYWORD)
    private String deviceCode;

//    忽略字段
    @IndexField(exist = false)
    private String msg;

}

这里需要注意的是sqlId的类型选择

如果选择是String,然后使用的是雪花id或者自增id,fieldType则要使用Long或者Integer类型,不能选择keyword,否则可能会导致排序出现问题

选择Long类型的话,使用keyword就没什么问题

数据库主键id注意事项:

建议不要使用id,因为作者的id,一般用于es的_id绑定一起,如果使用了,可能会导致查询id的时候无法查出数据等

如果要使用的话,得修改作者的源码部分才可。因此还是建议修改个名称万事平安了。

接口编写与测试

基础controller如下:

package com.walker.es.controller;

import com.walker.es.esmapper.AlarmRecordMapper;
import com.walker.es.model.AlarmRecordEntity;
import com.walker.es.model.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WalkerShen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值