本文档介绍如何基于reindex,实现将阿里云Elasticsearch(简称ES)5.x集群的多type数据,迁移到高版本ES 6.x集群的单type中。

实现方式

您可以通过以下两种方式实现多type数据迁移:
  • 自定义type字段:将ES 5.x集群中的单索引多type数据,通过reindex script方式合并成单索引单type索引方式,详情请参见下文的自定义type字段
  • 自定义每种文档类型的索引:将ES 5.x集群中的索引,按照不同type,通过reindex拆分单独的索引方式,详情请参见下文的自定义每种文档类型的索引
注意 按照需求选择上述方式中的一种,转换成单type索引后,再使用阿里云Logstash迁移该索引数据,详情请参见阿里云Logstash迁移数据

准备工作

自定义type字段

  1. 登录阿里云Elasticsearch控制台
  2. 单击需要进行数据迁移的源实例ID。
  3. 进入ES集群配置页面,配置允许自动创建索引。
    配置方法请参见YML文件配置允许自动创建索引
  4. 登录ES实例的Kibana控制台
  5. 单击左侧导航栏的Dev Tools
  6. Dev Tools页面的Console中,执行以下命令,将单索引多type合并成单索引单type。
    POST _reindex
    {
      "source": {
        "index": "twitter"
      },
      "dest": {
        "index": "new1"
      },
      "script": {
        "inline": """
        ctx._id = ctx._type + "-" + ctx._id;
        ctx._source.type = ctx._type;
        ctx._type = "doc";
        """,
        "lang": "painless"
      }
    }

    以上示例通过自定义type的方式,指定ctx._source.typenew1索引中添加type字段,将其设置为原始_type的值。并且new1索引的_id_type-_id组成,防止存在不同类型的文档具有相同的id,发生冲突的情况。

  7. 使用GET new1/_mapping命令,查看Mapping结构。
    查看Mapping结构
  8. 查看索引内容。
    GET new1/_search
    {
       "query":{
         "match_all":{
          }
      }
    }
    查看索引内容

自定义每种文档类型的索引

  1. 登录阿里云Elasticsearch控制台
  2. 单击需要进行数据迁移的源实例ID。
  3. 进入ES集群配置页面,配置允许自动创建索引。
    配置方法请参见YML文件配置允许自动创建索引
  4. 登录ES实例的Kibana控制台
  5. 单击左侧导航栏的Dev Tools
  6. Dev Tools页面的Console中,执行以下命令,将单索引多type拆分单索引单type。
    POST _reindex
    {
      "source": {
        "index": "twitter",
        "type": "tweet",
        "size": 10000
      },
      "dest": {
        "index": "twitter_tweet"
      }
    }
    POST _reindex
    {
      "source": {
        "index": "twitter",
        "type": "user",
        "size": 10000
      },
      "dest": {
        "index": "twitter_user"
      }
    }

    以上示例将twitter索引按照不同type分别拆分成twitter_tweettwitter_user索引。

  7. 查看索引数据。
    GET twitter_tweet/_search
    {
       "query":{
         "match_all":{
    
          }
      }
    }
    GET twitter_user/_search
    {
       "query":{
         "match_all":{
    
          }
      }
    }

阿里云Logstash数据迁移

  1. 进入Logstash实例管理页面
  2. 管道管理页面,使用配置文件管理的方式配置管道。
    管道配置的详细方法请参见配置文件管理,Config配置示例如下。
    input {
        elasticsearch {
        hosts => ["http://es-cn-0pp1f1y5g000h****.elasticsearch.aliyuncs.com:9200"]
        user => "elastic"
        index => "*"
        password => "your_password"
        docinfo => true
      }
    }
    filter {
    }
    output {
      elasticsearch {
        hosts => ["http://es-cn-mp91cbxsm000c****.elasticsearch.aliyuncs.com:9200"]
        user => "elastic"
        password => "your_password"
        index => "test"
      }
    }
  3. 保存并部署管道配置,开始进行数据迁移。

查看数据迁移结果

进入目标ES的Kibana控制台,在Dev Tools页面的Console中,执行以下命令,查看迁移成功的索引信息。

GET _cat/indices?v