首页 > 其他分享 >ElasticSearch7创建index时指定type问题

ElasticSearch7创建index时指定type问题

时间:2022-08-30 21:25:36浏览次数:78  
标签:index eo xxx ElasticSearch7 版本 type ES

项目背景

最近在某项目开发中遇到一个高版本ES创建索引时指定index和type问题。
项目中的ES使用了阿里云上的ES,版本为7.4。

通过ES官网对各版本type的演变如下:

  • 在5.X版本中,一个index下可以创建多个type
  • 在6.X版本中,一个index下只能存在一个type
  • 在7.X版本中,一个index下只能存在一个type,创建index时可不指定type

项目中spring-boot版本为2.0.4.RELEASE,操作ES使用了spring-data-elasticsearch框架,
引入了它的starter,spring-boot-starter-data-elasticsearch,版本为2.3.3.RELEASE,
这个版本依赖的spring-data-elasticsearch版本为3.2.1.RELEASE,elasticsearch版本为6.8.4。

项目中ES索引实体类配置如下:

@NoArgsConstructor
@AllArgsConstructor
@Data
@EqualsAndHashCode(callSuper = false)
@Document(indexName = "xxx_eo", type = "xxx_eo", shards = 1)
public class PromotionActiveInfoEo extends Eo {
  ...
}

@Documentspring-data-elasticsearch提供的注解,里面indexName指定索引名,type指定类型名。
项目中的实体2个属性都配置了,并且indexNametype配置的一致。

在ES 7.4中,一般通过脚本人工创建索引,不指定type
例:

PUT /xxx_eo_v1
{
  "aliases": {
    "xxx_eo": {}
  },
  "settings": {
    ...
  },
  "mappings": {
    "properties": {
      ...
    }    
  }
}

创建出来的索引名为xxx_eo_v1,别名为xxx_eo,类型名没有指定,即为默认的_doc
这样会导致和项目中注解配置的不一致,因为项目中指定了type类型名,跟索引名相同。

解决方法

  1. 通过spring-data-elasticsearch框架里提供的注解(@Document、@Id、@Field)配置,在项目启动时自动创建索引

  2. 人工通过脚本创建索引,注意在创建时设置include_type_name=true,并在mappings里指定类型名
    例:

PUT /xxx_eo_v1?include_type_name=true
{
  "aliases": {
     "xxx_eo": {}
  },
  "settings": {
    ...
  },
  "mappings": {
    "xxx_eo": {
      "properties": {
        ...
      }    
    }
  }
}

参考

标签:index,eo,xxx,ElasticSearch7,版本,type,ES
From: https://www.cnblogs.com/cdfive2018/p/16638315.html

相关文章