easy-es动态索引支持

news/2024/9/21 3:42:31/

背景

很多项目目前都引入了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:9200address : es-nqaegv2l.public.tencentelasticsearch.com:9200schema: https#若无 则可省略此行配置username: elastic#若无 则可省略此行配置password: gQbqb6nh7Hl5DHbZ db-config:# 是否开启下划线转驼峰 默认为falsemap-underscore-to-camel-case: false # 索引前缀,可用于区分环境  默认为空 用法和MP的tablePrefix一样的作用和用法index-prefix: dev_# id生成策略 customize为自定义,id值由用户生成,比如取MySQL中的数据id,如缺省此项配置,则id默认策略为es自动生成id-type: customize # 字段更新策略 默认为not_nullfield-strategy: not_empty # 默认开启,开启后查询所有匹配数据,若不开启,会导致无法获取数据总条数,其它功能不受影响,若查询数量突破1W条时,需要同步调整@IndexName注解中的maxResultWindow也大于1w,并重建索引后方可在后续查询中生效(不推荐,建议分页查询).enable-track-total-hits: true # 数据刷新策略,默认为不刷新,若对数据时效性要求比较高,可以调整为immediate,但性能损耗高,也可以调整为折中的wait_untilrefresh-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还是不传都可以生效,比如下面两个案例
在这里插入图片描述
在这里插入图片描述
当然如果在每个实体类中添加这个@TableName(value = “vehicle_info”, keepGlobalPrefix = true)可能比较麻烦,也可以在全局配置
在这里插入图片描述


http://www.ppmy.cn/news/1528216.html

相关文章

Spring Boot中使用注解拦截器实现通用校验器和基于角色的权限注解

通过使用Spring Boot的注解和拦截器&#xff0c;我们可以优雅地实现通用校验器和灵活的权限控制。本文将以电商交易系统为案例&#xff0c;详细讲解如何在Spring Boot中实现支持角色入参的权限校验器&#xff0c;以及如何通过注解拦截器实现通用校验器&#xff0c;提供高拓展性…

企业专用智能云盘 | 帮助企业便捷管控企业文档 | 天锐绿盘云文档安全管理系统

由于当前多数企业内部的办公文件普遍散落于各员工电脑中&#xff0c;导致存在诸多潜在的文档使用风险。为优化团队协作效率&#xff0c;天 锐 绿盘是一款集文档统一管理、高效协同于一体的企业云盘&#xff0c;帮助企业解决文档管理中的诸多难题。 【地址&#xff1a;点击了解天…

2024永久激活版 Studio One 6 Pro for mac 音乐创作编辑软件 完美兼容

Studio One 6是一款功能强大的音乐制作软件&#xff0c;由PreSonus公司开发。它提供了全面的音频录制、编辑、混音和母带处理工具&#xff0c;适用于音乐制作人、音频工程师和创作人员。 Studio One 6拥有直观的用户界面&#xff0c;使用户能够快速而流畅地进行音乐创作。它采…

Elasticsearch集群的运维与管理

【1】安装启动ES 集群 &#xff08;1.1&#xff09;集群架构规划 OS  ES versionIpnode.nameRolecluster.namees basedirCentOS Linux release 7.8.2003 (Core)elasticsearch-7.14.1 192.168.175.132:9200 cluster&#xff1a;192.168.175.132:9301 node_1 node.mastertrue …

海外问卷调查:选择静态IP还是动态IP?

在全球化的市场研究中&#xff0c;海外问卷调查是一种重要的数据收集手段。然而&#xff0c;选择合适的IP类型对于确保调查的效率、质量和合法性至关重要。本文将探讨在进行海外问卷调查时&#xff0c;静态IP与动态IP的优劣&#xff0c;并提供决策指导。 一、IP类型基础 在深入…

单片机实现内存管理的C语言实现

在嵌入式系统&#xff08;如单片机&#xff09;中&#xff0c;内存资源非常有限&#xff0c;因此需要高效的内存管理机制。在这种情况下&#xff0c;可能无法使用标准的动态内存管理函数&#xff08;如 malloc 和 free&#xff09;。因此&#xff0c;通常需要设计一个自定义的内…

【java面试每日五题之基础篇一】(仅个人理解)

1. 怎么理解面向对象编程&#xff08;Object Oriented Programming&#xff0c;OOP&#xff09; 面向对象编程是一种编程范式&#xff0c;核心思想是将真实世界中的事物都抽象为对象&#xff0c;通过与代码中的对象进行交互从而实现各种需求&#xff0c;对于OOP中关键概念的理解…

基于python flask的高血压疾病预测分析与可视化系统的设计与实现,使用随机森林、决策树、逻辑回归、xgboost等机器学习库预测

研究背景 随着现代社会的快速发展&#xff0c;生活方式的改变和人口老龄化的加剧&#xff0c;心血管疾病&#xff0c;尤其是高血压&#xff0c;已成为全球范围内的重大公共健康问题。高血压是一种常见的慢性疾病&#xff0c;其主要特征是动脉血压持续升高。长期不控制的高血压…