如何优雅的为高版本Elasticsearch创建动态Mappings结构描述

2020-06-01 00:00:00 索引 创建 字段 类型 结构

在项目中使用SpringBoot可以快速集成各种中间件,遵循依赖优于配置原则,我们只需要选择合适的SpringBoot版本就可以轻松集成中间件,并且可以快速上手;

但是由于Elasticsearch版本更新快等各方面原因,在目前的SpringBoot还只能支持到5.0版本以下的Elasticsearch;根据Github上Elasticsearch文档中给出的版本对应关系可以看得出来,目前SpringBoot版本1.4及以上版本高适配的Elasticsearch版本为2.0.0~5.0.0;

Github地址:github.com/spring-proje

我们再来看一下Elasticsearch官网,elastic.co/cn/downloads 可以看到,目前Elasticsearch已经更新到7.3.0版本了;

那么,假如我们需要整合高版本的Elasticsearch到SpringBoot框架中,这时候我们就需要手动来指定索引的mapping结构(类似于数据库表结构)了;

在我们使用Spring Data创建Elasticsearch(后面简称ES)的mappings结构时,我们只需要在实体类上使用@Document注解标记当前实体需要创建的索引名称及索引类型名称即可,当我们将实体类交由ES的API时,API会自动根据实体类属性类型分配响应的结构类型;同时,我们还可以使用@Field注解在对应的属性上描述属性的特性,其他的交由API处理即可生成不错的mappings结构;

但是对于目前而言,ES版本高于5.0.0.*的,Spring并未对此做过多的集成,此时的mappings结构的描述只能交由我们自己来控制;

假设有一个实体类GwAdvice.java,其结构如下:

@Data
@TableName("gw_advice")
public class GwAdvice extends Model<GwAdvice> {

    private static final long serialVersionUID = 1L;

    @TableId(value = "advice_id", type = IdType.AUTO)
    private Long adviceId;

    @TableField("advice_type_id")
    private Long adviceTypeId;

    @TableField("advice_title")
    private String adviceTitle;
    
    @TableField("advice_del_flag")
    private String adviceDelFlag;

    @Override
    protected Serializable pkVal() {
        return this.adviceId;
    }
}

相关文章