自己封装Elasticsearch,下载到本地仓库复用

拉取代码

git拉取 yxh-elasticsearch: es基本封装工具

拉完修改

你可以根据自己去修改这些代码,最后install加package,就打到了本地maven仓库,调用的时候也非常方便,可以看下文。

介绍

注解

一共有三个自定义注解

@DocumentIndex

作用

一共四个字段,indexName是用于你在实体类上,可直接声明该实体类所对应的ES文档名,可自定义文档名称

maxSize 可以设置最大数据量一般都是设置亿级以上,我这边少打了几个0,因为ES所使用的场景一般都是数据量极大的。

shards 设置分片

replicas 设置副本,也就是备份

以上这些都可以自行设置

@IdIndex

由于这个石墨文档企业版需要续费3000块大洋,贵死了,导致没办法上传图片了,接下来直接看代码解析吧

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface IdIndex {


}
作用

该注解作用其实就是标识一下该字段为主键,就跟Mybatis-plus一样,都需要表示一下主键,毕竟你大部分CRUD操作涉及到主键,所以我们当然是需要标识一下了。

很简单,直接标识在主键字段上就OK了。

底层很简单无非就是识别一下该类是否有标识该注解,如果有就会通过映射的关系,将该字段设置为主键,想了解ES的主键这段有什么用,可以往上翻翻 实体类 需加注解 这个模块

/**
 * 创建ID
 * */
private String getObjectId(Object data){
    String idValue = null;
    try {
        Field[] fields = data.getClass().getDeclaredFields();
        for (Field field : fields) {
            IdIndex annotation = field.getAnnotation(IdIndex.class);
            if (null != annotation){
                field.setAccessible(true);
                idValue = field.get(data).toString();
                break;
            }
        }
    } catch (Exception e){
        log.error("报错信息:{}",e);
    }
    return idValue;
}

@PropertiesIndex

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PropertiesIndex {


    String name() default ""; //类型名称


    String type() default "keyword"; //类型


    String analyzer() default "ik_smart"; //分片


    boolean index() default true; //是否建立索引


    String searchAnalyzer() default "ik_smart"; //查询分片


    boolean ignore() default true; //是否创建索引


}

该注解就得好好讲讲了

作用
name()

也就是你可以更改该字段在ES中字段名称,如图中

@PropertiesIndex(name = "clazzName",type = "char")//定义存入es的字段名 和 字段类型
private String clazzName;

我的字段是clazzName,但是,我可以在该注解中设置name=“name”或者 name=“cname”,我可以叫任何字段名,相当于在同步到ES中,字段名称更换了。

type()

type就是该字段的类型,先讲讲场景: 好比我该字段类型数据库时是decimal而我的实体类是不是就要用BigDecimal,但是我ES中,不想用这个字段,我是不是可以设置为double或者int类型,这个时候我加上type="int" 或者 type="double" ,随后你在同步ES的时候该字段类型就是你type的标识的类型

总结

剩下几个字段都是默认值,自己可以设置,基本都可以自己去看一看,玩一玩,所有的类型字段都是跟原ES类型是一致的,每个注解都有对应的作用,主要是要加上@DocumentIndex该注解是必须加的。我这一套注解你会发现跟mybatis-pluseasy-es是差不多的,所以,我们可以学以致用一下,在后面自己封装一些工具类和接口,都已用这类方法,注解就用这几个可以吃遍天下。

使用方法

依赖
<dependency>
    <groupId>com.yxh</groupId>
    <artifactId>yxh-elasticsearch</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

这是你打包完,下载到本地maven仓库后,在别的工程中调用,可以方便许多。

实现接口
service.impl层
@Service
public class StuServiceImpl extends YxhEsServiceImpl<Stu> implements StuService

这段代码是不是赔偿熟悉,跟继承mybatis-plus是不是一模一样,通过继承的方式继承封装好的YxhEsServiceImpl实现类,可直接调用,由于该工具底层我采用是跟用<T>泛型来标识,所以实现的时候也必须加上你的实体类类型

可以直接通过this.方法就可以调用了。

mapper层
@Component
public interface StuMappers extends YxhEsService<Stu> {
}

mapper层直接通过继承的方式继承YxhEsService这个接口,来实现。

上面为什么要加@Component呢?

首先我们这个工程师spring工程吧,需要spring来管理,我们就需要加上spring的注解,才能识别到,否则会报null异常,或则是找不到这个类,无法实例之类的错。

第二,就是我们一般都是把mapper放在mapper层,但是我们的mapper层在启动类已经加上了@MapperScan("com.yxh.mapper")这个注解,它管理着整个mapper层的类,因为这个是扫描mybatis的,一旦被管理了,他会扫描你该类里面是否用到mybatis,没用的话,还是会报错,所以我们加一个@Component注解就标识了,该类只是被spring管理了而已。

总结:

自己封装的es肯定没有人家大公司封装的来的强,但是自己封装主要是为了提高对代码底层的了解,以及对各种自定义注解的了解,提高自己的代码思维能力。如果自己玩的话,已通过执行封装,自己根据自己常用的操作习惯来封装,提高开发效率,或者在企业当中,通过封装也能提高企业开发效率,当然这种活都是架构师来干的,就当自己玩玩,以及在面试的时候,能讲出东西来,OK了程序猿们,该下班了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值