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还是不传都可以生效,比如下面两个案例
在这里插入图片描述
在这里插入图片描述

好的,我可以为您提供一些关于Spring Boot整合Easy Elasticsearch的指导。 1. 添加依赖 首先,在`pom.xml`文件中添加Easy ElasticsearchElasticsearch的依赖: ```xml <dependency> <groupId>com.jun</groupId> <artifactId>easy-elasticsearch-spring-boot-starter</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.12.0</version> </dependency> ``` 2. 配置Elasticsearch 在`application.yml`中添加Elasticsearch的配置信息: ```yaml spring: elasticsearch: rest: uris: http://localhost:9200 ``` 3. 创建Elasticsearch的Repository 创建一个继承自`ElasticsearchRepository`的接口,用于定义Elasticsearch的操作方法: ```java public interface BookRepository extends ElasticsearchRepository<Book, Long> { List<Book> findBooksByAuthor(String author); } ``` 其中,`Book`是我们要操作的实体类,`Long`是这个实体类的ID类型。 4. 测试Elasticsearch 可以编写一个测试方法来测试Elasticsearch是否成功整合: ```java @SpringBootTest class BookRepositoryTest { @Autowired private BookRepository bookRepository; @Test public void testSave() { Book book = new Book(); book.setId(1L); book.setTitle("Java编程思想"); book.setAuthor("Bruce Eckel"); bookRepository.save(book); } @Test public void testFind() { List<Book> books = bookRepository.findBooksByAuthor("Bruce Eckel"); System.out.println(books); } } ``` 执行测试方法后,如果能够正确输出结果,则说明Easy Elasticsearch已经成功整合到了Spring Boot中。 希望这些步骤能够对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值