easy-es动态索引支持

背景

很多项目目前都引入了es,由于es弥补了mysql存储及搜索查询的局限性,随着技术的不断迭代,原生的es客户端使用比较繁琐不直观,上手代价有点大,所以easy-es框架就面世了,学习成本很低,有空大家可以去了解下easy-es官网
那说回主题,我们项目会发布在测试环境,也会部署在UAT环境,最后上线,但是ES可能就部署一套或者和别的业务进行公用,此时我们需要按照不同环境进行es数据隔离,由于代码肯定是一套的,那此时方案就需要通过nacos的动态配置进行索引自动更新新的索引名了

引入依赖

		<dependency>
			<groupId>cn.easy-es</groupId>
			<artifactId>easy-es-boot-starter</artifactId>
			<version>1.0.3</version>
		</dependency>

es全局配置

easy-es:
  global-config:
    # 是否开启小黑子模式,默认关闭, 开启后日志将更有趣,提升编码乐趣,仅供娱乐,切勿用于其它任何用途
    i-kun-mode: false
    #索引处理模式,smoothly:平滑模式, not_smoothly:非平滑模式, manual:手动模式,,默认开启此模式
    process-index-mode: smoothly
    # 开启控制台打印通过本框架生成的DSL语句,默认为开启,测试稳定后的生产环境建议关闭,以提升少量性能
    print-dsl: true
    # 当前项目是否分布式项目,默认为true,在非手动托管索引模式下,若为分布式项目则会获取分布式锁,非分布式项目只需synchronized锁. 
    distributed: false
    # 重建索引超时时间 单位小时,默认72H 可根据ES中存储的数据量调整 
    reindexTimeOutHours: 72
    # 异步处理索引是否阻塞主线程 默认阻塞 数据量过大时调整为非阻塞异步进行 项目启动更快
    async-process-index-blocking: true 
    # 分布式环境下,平滑模式,当前客户端激活最新索引最大重试次数,若数据量过大,重建索引数据迁移时间超过4320/60=72H,可调大此参数值,此参数值决定最大重试次数,超出此次数后仍未成功,则终止重试并记录异常日志
    active-release-index-max-retry: 4320
    # 分布式环境下,平滑模式,当前客户端激活最新索引最大重试次数 分布式环境下,平滑模式,当前客户端激活最新索引重试时间间隔 若您期望最终一致性的时效性更高,可调小此值,但会牺牲一些性能
    active-release-index-fixed-delay: 60 
  #默认为true,若为false则认为不启用本框架
  enable: true 
  # es的连接地址,必须含端口 若为集群,则可以用逗号隔开 例如:127.0.0.1:9200,127.0.0.2:9200
  address : es-nqaegv2l.public.tencentelasticsearch.com:9200
  schema: https
  #若无 则可省略此行配置
  username: elastic
  #若无 则可省略此行配置
  password: gQbqb6nh7Hl5DHbZ 
  db-config:
      # 是否开启下划线转驼峰 默认为false
      map-underscore-to-camel-case: false 
       # 索引前缀,可用于区分环境  默认为空 用法和MP的tablePrefix一样的作用和用法
      index-prefix: dev_
      # id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成
      id-type: customize 
      # 字段更新策略 默认为not_null
      field-strategy: not_empty 
      # 默认开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响,若查询数量突破1W条时,需要同步调整@IndexName注解中的maxResultWindow也大于1w,并重建索引后方可在后续查询中生效(不推荐,建议分页查询).
      enable-track-total-hits: true 
      # 数据刷新策略,默认为不刷新,若对数据时效性要求比较高,可以调整为immediate,但性能损耗高,也可以调整为折中的wait_until
      refresh-policy: immediate 
      # 批量更新接口的阈值 默认值为1万,突破此值需要同步调整enable-track-total-hits=true,@IndexName.maxResultWindow > 1w,并重建索引.
      batch-update-threshold: 10000 
      # 是否智能为字段添加.keyword后缀 默认开启,开启后会根据当前字段的索引类型及当前查询类型自动推断本次查询是否需要拼接.keyword后缀
      smartAddKeywordSuffix: true 

业务层

    public void insertVersionHistoryEcus(List<VehicleEcuVersionHistoryDO> softVersionChangedEcus) {
        for (VehicleEcuVersionHistoryDO item : softVersionChangedEcus) {
            item.setId(idService.nextId());
            if (item.getCreateTime() == null) {
                item.setCreateTime(new Date());
            }
            if (item.getUpdateTime() == null) {
                item.setUpdateTime(new Date());
            }
        }
        ecuVersionHistoryRepository.insertBatch(softVersionChangedEcus, EsConstant.INDEX_VEHICLE_ECU_VERSION_HISTORY);
    }
public class EsConstant {

    private EsConstant() {
    }

    // 索引名称

    public static final String INDEX_VEHICLE_ECU_VERSION_HISTORY = "vehicle_ecu_version_history";
    public static final String INDEX_VEHICLE_ECU_HARDWARE_HISTORY = "vehicle_ecu_hardware_history";
    public static final String INDEX_VEHICLE_LOG_NETWORK = "vehicle_log_network";
    public static final String INDEX_VEHICLE_LOG_CHECK = "vehicle_log_check";
    public static final String INDEX_VEHICLE_LOG_ECU_REPORT = "vehicle_log_ecu_report";
    public static final String INDEX_VEHICLE_TASK_UPGRADE_HISTORY = "vehicle_task_upgrade_history";
    public static final String INDEX_VEHICLE_TASK_UPGRADE_INFO = "vehicle_task_upgrade_info";
    public static final String INDEX_VEHICLE_LOG_FILE = "vehicle_log_file";
    public static final String INDEX_VEHICLE_LOG_EVENT = "vehicle_log_event";
    public static final String INDEX_VEHICLE_ECU = "vehicle_ecu";
}
@Data
@TableName(value = EsConstant.INDEX_VEHICLE_ECU)
public class VehicleEcuDO extends BaseEcuDO implements Cloneable {}

注意,虽然nacos配置了index-prefix: dev_,但是仍不会生效,因为还缺一个配置,需要在每个实体类上@TableName(value = “vehicle_info”, keepGlobalPrefix = true),目前业务中使用es进行CURD,无论是你显示传入indexName还是不传都可以生效,比如下面两个案例
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/875538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Gateway】Gateway Filter Factories

Predicate决定了请求由哪一个路由处理,如果在请求处理前后需要加一些逻辑,这就是Filter(过滤器)的作用范围了.Filter分为两种类型:Pre类型和Post类型 滤器的两种类型 Pre 类型过滤器: 执行时机: 在请求被转发到后端服务之前执行。作用: 可以用来执行鉴权、限流、请求日志记录、…

Django笔记一:搭建Django环境与URL路径访问

博主之前学从Java后端开发&#xff0c;后面获取到读研资格&#xff0c;想着未来转算法岗&#xff0c;初学Python&#xff0c;发现Python还挺有趣的&#xff0c;由于之前所学后端缘故&#xff0c;有点后端情节&#xff0c;想学习一下Django框架&#xff08;python的web框架&…

什么是交换机级联?

在现代计算机网络中&#xff0c;交换机级联是一种广泛应用的技术&#xff0c;有助于提升网络的扩展性和灵活性。本文将深入探讨交换机级联相关知识&#xff0c;详细介绍其基本概念和连接配置方法&#xff0c;并对常见技术问题进行解答。 交换机级联概述 交换机级联是指通过将…

线性基大发现

一.构造方法 1.贪心法&#xff08;每一个数往里插入即可&#xff09; /*贪心法构造线性基的特点&#xff1a; 1.从小到大排列 2.各个基的高位可能存在重复的1 2.线性基不是唯一的&#xff0c;与原集合的元素顺序有关*/ void insert(int x){//贪心法for(int i63;i>0;i--){i…

c#中给winform定义快捷键的几种方式

快捷键的使用在日常的开发中频率比较高&#xff0c;这里总结了最常见的各种快捷键的设置方式&#xff0c;需要的时候大家直接照抄就可以了&#xff0c;不用再去查询如何实现了。 文章目录 一、按钮快捷键二、菜单快捷键三、全局快捷键1、重写ProcessCmdKey2、使用KeyPreview属…

Word使用手册

修改样式 编辑word文档时&#xff0c;标题和正文文本通常有不同的格式&#xff0c;如果能将这些格式保存为样式&#xff0c;下一次就能直接调用样式&#xff0c;而不需要重复手动设置格式。 可以将样式通常保存为不同的 样式模板.docx&#xff0c;要调用不同样式集&#xff0…

MATLAB基础应用精讲-【数模应用】卡方拟合优度检验(附MATLAB、python和R语言代码实现)

目录 前言 几个高频面试题目 卡方分布与拟合优度的卡方检验是什么关系? 算法原理 什么是卡方检验 卡方是什么? 如何使用卡方表计算器? 什么是卡方拟合优度检验 使用条件 基本原理 数学模型 卡方检验自由度 理论频数计算 需要注意的事项 卡方检验分类 1、 独…

校园管理系统创新:Spring Boot框架应用案例

第4章 系统设计 4.1 系统体系结构 校园管理系统的结构图4-1所示&#xff1a; 图4-1 系统结构 登录系统结构图&#xff0c;如图4-2所示&#xff1a; 图4-2 登录结构图 校园管理系统结构图&#xff0c;如图4-3所示。 图4-3 校园管理系统结构图 4.2开发流程设计 系统流程的分…

走进低代码表单开发(一):可视化表单数据源设计

在前文&#xff0c;我们已对勤研低代码平台的报表功能做了详细介绍。接下来&#xff0c;让我们深入探究低代码开发中最为常用的表单设计功能。一个完整的应用是由众多表单组合而成的&#xff0c;所以高效的表单设计在开发过程中起着至关重要的作用。让我们一同了解勤研低代码开…

网络安全要点总结

1. 入侵检测与防御: 1)入侵检测与系统IDS(intrusion detection system):防火墙之后的第二道闸门; IDS的部署:采用镜像端口或者集线器方式;部署在:服务器交换机上,internet接入路由器后面的第一台交换机上; IRSintrusion response system入侵响应系统: 2).IPS(…

如何进行大模型训练和微调?(实战)

1、在项目中&#xff0c;如果prompt和function calling足够好&#xff0c;尽量不要微调&#xff0c;节约成本。 以下是针对function calling的slot&#xff0c;评估准确率&#xff08;识别准确度&#xff09;、召回率&#xff08;全面率&#xff09;&#xff0c;F1值。 从中可以…

华为初级认证HCIA怎么样?

想在网络技术领域实现职业突破吗&#xff1f;华为HCIA初级认证是专为网络领域的新手与初学者设计的一项入门级认证。它旨在评估并确认个人对网络基本原理和技术知识的扎实掌握&#xff0c;是步入华为认证体系大门的基石。 一、华为HCIA 初级认证概述 华为初级认证网络工程师&am…

为OneAPI配置MySQL数据库及设置开机启动

OneAPI启动时&#xff0c;如果发现没有数据库他会在项目根目录自动创建SqlLit&#xff0c;为提高OneAPI的性能及管理&#xff0c;这里给出一个使用MySQL数据库的案例&#xff0c;同时本文介绍如何在源码部署的情况下&#xff0c;设置OneAPI的开机自动启动。 OneAPI的源代码安装…

【Qt】实现顶部导航栏自适应滑动效果

需求&#xff1a; 顶部导航栏有若干选项&#xff0c;可能很多&#xff0c;顶部区域不能完全展示&#xff0c;比如10个选项&#xff0c;界面一次只能展示五个&#xff0c;那么要求把后面的选项隐藏起来&#xff0c;并且&#xff0c;当点击第四个第五个按钮的时候&#xff0c;自…

Android Studio 加载多个FLutter项目

按顺序操作即可 选择工程 选择Modules, 导入 module 选中创建module 选择要导入的目录&#xff0c;只选择主目录&#xff0c;下面的文件不要选 添加完成&#xff0c;点击ok后&#xff0c;会进行导入 最终导入成功

【rpg像素角色】俯视角-行走动画

制作像素角色的俯视角行走动画并不像看上去那么复杂&#xff0c;尤其是在你已经完成了角色的4个方向站立姿势之后&#xff08;其中左右方向可以通过水平翻转实现&#xff09;。接下来&#xff0c;我会一步步为你讲解如何制作行走动画。 1. 理解行走规律 在制作行走动画之前&am…

堆排序

一&#xff1a;思想 堆排序(Heapsort)是指利用 堆 这种数据结构所设计的一种排序算法&#xff0c;它是选择排序的一种。它是通过堆来进行选择数据。 动图&#xff1a; 二&#xff1a;实现思路 假设&#xff1a;现在对一个7个整形的数组进行升序堆排&#xff08;2 1 5 7 4 3 …

基于 CycleGAN 对抗网络的自定义数据集训练

目录 生成对抗网络&#xff08;GAN&#xff09; CycleGAN模型训练 训练数据生成 下载开源项目CycleGAN 配置训练环境 开始训练 模型测试 可视化结果 生成对抗网络&#xff08;GAN&#xff09; 首先介绍一下什么是GAN网络&#xff0c;它是由生成器&#xff08;Generator…

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的&#xff0c;专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关&#xff0c;每一关都包含着不同上传方式。 注意 1.每一关没有固定的…

Modbus协议02:存储区简介

视频链接&#xff1a;【2】Modbus协议存储区说明_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV11G4y1W7pU?p2&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.为什么需要存储区、存储区类型及代号 2.Modbus存储区范围及地址模型