当前位置: 首页 > article >正文

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.kler.cn/a/308223.html

相关文章:

  • MaxKB
  • 随机数
  • 重卡穿越商都,ROG DAY 2024郑州站高燃来袭
  • 微服务各组件整合
  • acwing算法基础02一高精度,前缀和,差分
  • SpringCloud学习笔记
  • 数据库的约束
  • Java4----String
  • 【新片场-注册安全分析报告-无验证方式导致安全隐患】
  • c++元编程tookit类
  • 前端 + 接口请求实现 vue 动态路由
  • 惬意享受阅读,优雅的微信公众号订阅方式,极空间部署『WeWe RSS』
  • Golang | Leetcode Golang题解之第402题移掉K位数字
  • 无人机之防风性能篇
  • deepinlinux-v23用deepinunioncode初始c例子
  • 小程序开发设计-第一个小程序:注册小程序开发账号②
  • godot——tween_method插值,如何处理多参数?参数位置怎么调?
  • oracle 使用 PL/SQL Developer创建表并插入单条、多条数据
  • 【程序人生】《把时间当做朋友》李笑来思维导图
  • Vue 3有哪些新特性
  • 区块链BCS配置选择注意事项
  • 【OJ刷题】双指针问题6
  • react 基础语法
  • OpenCV运动分析和目标跟踪(1)累积操作函数accumulate()的使用
  • 5分钟配置Nginx?(二)
  • 用Facebook广告提升本地业务的影响力