需求:某实例需要按照月份来维护,所以之前的“写死”索引的方式当然不行了。通过百度和看SpringDataElasticSearch官方文档,最后解决了这个问题。

关键技术点: Spel表达式 (通过调用方法来获取新的索引名,方法内处理新索引名的生成逻辑)

实体类部分代码:

从表达式中可以看出:esConfig 是一个bean,调用了getXX方法。



ElasticSearch创建动态索引_elasticsearch


 

@Document(indexName = "#{esConfig.getApiCallIndexName()}")
public class ApiCallRecord {

/**
* 平台流水号
*/
@Id
@Field(type = FieldType.Keyword)
private String transId;

。。。。。。

}


 


ElasticSearch创建动态索引_elasticsearch


 

动态索引Bean代码:

将改类注册成Bean,名称为“esConfig”,其中apiCallIndexNamePrefix,是索引的前缀(为了通用,让它从配置文件取,如果没有那么就设置默认值“api_call_rec_”),方法中的逻辑就是生成逻辑,这样就能够生成api_call_rec_yyyy_MM这样的索引了。



ElasticSearch创建动态索引_elasticsearch


 

@Component(value = "esConfig")
public class ElasticSearchConfiguration {

@Value("${esConfig.apiCallIndexName:api_call_rec_}")
private String apiCallIndexNamePrefix;

public String getApiCallIndexName() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy_MM");
return apiCallIndexNamePrefix + LocalDateTime.now().format(formatter);
}


}


 


ElasticSearch创建动态索引_elasticsearch