首页 > 其他分享 >自己封装Elasticsearch,下载到本地仓库复用

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

时间:2024-09-29 12:52:02浏览次数:8  
标签:mapper 封装 String 复用 Elasticsearch 注解 type ES

拉取代码

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了程序猿们,该下班了。

标签:mapper,封装,String,复用,Elasticsearch,注解,type,ES
From: https://blog.csdn.net/yxhsk8/article/details/142632905

相关文章

  • 用 PHP 封装的发送邮件类
    点击查看代码<?phpclassMailSender{//发件人邮箱地址private$fromEmail;//发件人名称private$fromName;//收件人邮箱地址private$toEmail;//邮件主题private$subject;//邮件内容private$body;//构造函......
  • 封装axios请求
    1、为什么要封装axios封装axios,对错误信息进行统一处理,能提高代码简洁性,规范代码2、封装步骤2.1创建文件首先在utils文件夹下新建request.js文件,内容如下。要确保项目已经安装了axios,和element-uiimportstorefrom'@/store'import{getToken}from'@/utils/loca......
  • Codesys3.5 封装库 和 库的调用
    1、库的建立第一步。 2、新建个文件夹,方便管理哦 3、然后在文件右键》添加对象中添加几个pou   4、随便建立几个。 4、设置工程信息,也就库信息哦双击工程信息弹出 5、最后就是生成库文件哦。   6、调用刚才的库,要新建一个工程哦。   7......
  • ElasticSearch初体验
    我的网站集成ElasticSearch初体验   最近,我给我的网站(https://www.xiandanplay.com/)尝试集成了一下es来实现我的一个搜索功能,因为这个是我第一次了解运用elastic,所以如果有不对的地方,大家可以指出来,话不多说,先看看我的一个大致流程   这里我采用的sdk的版本是El......
  • C++ day02(函数、类和对象、封装、构造函数、析构函数)
    目录【1】函数1》内联函数inline 2》函数重载overload  3》函数的参数默认(缺省)值 4》哑元函数【2】类和对象1》类的定义 2》创建对象 【3】封装 【4】构造函数constructor1》基础使用2》构造初始化列表 3》构造函数的调用方式 4》拷贝构造函数1>概......
  • ElasticSearch倒排索引
    一、ElasticSearch基本概念        Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsear......
  • 鸿蒙(HarmonyOS)实战开发篇——基于ArkUI现有能力实现自定义弹窗封装方案
    推荐看点鸿蒙(HarmonyOS)应用层开发(北向)知识点汇总【OpenHarmony】鸿蒙南向开发保姆级知识点汇总~持续更新中……场景描述自定义弹窗是应用开发需要实现的基础功能,包括但不限于HarmonyOS开发者文档中定义的模态、半模态、Toast等形式,封装一个好用且和UI组件解耦的弹窗组......
  • el-table封装
    <template><div:class="['md-table',noPadding?'no-padding':'']":style="tableStyle"ref="refTable"v-resize="handleResize"><!--{{defultSelectRadioIndex}}......
  • REF3012, REF3020, REF3025, REF3030, REF3033, REF3040采用 SOT-23-3 封装的 REF30xx
    1特性•微型封装:SOT-23-3•低压降:1mV•大输出电流:25mA•高精度:0.2%•低IQ:42µA(典型值)•出色的额定温漂性能:–0°C至70°C范围内为50ppm/°C(最大值)––40°C至+125°C范围内为75ppm/°C(最大值)2应用•温度和压力发送器•便携式、电池供电类设备......
  • vue3+ts+axios封装
    需要安装axios,qsyarnaddaxiosnpmiaxioscnpmiaxiosyarnaddqsnpmiqscnpmiqs在src/API/axios.tsimportaxiosfrom'axios';importqsfrom"qs";axios.defaults.baseURL="/api";//请求地址统一配置到vite.config.ts中代理......