ES本身不允许直接修改mapping字段类型,所以采用reindex迁移方式完成字段修改

一、获取原索引mapping

GET /test_index/_mapping

{
  "test_index" : {
    "mappings" : {
      "properties" : {
        "id" : {
          "type" : "text"
        },
        "name" : {
          "type" : "text"
        },
        "update_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd'T'HH:mm:ssZ||yyyy-MM-dd'T'HH:mm:ss"
        }
      }
    }
  }
}

二、创建新索引

PUT /new_test_index       #新创建索引new_test_index
{
  "settings": {
    "number_of_shards": 5,     #设置分片数,原索引为5
    "number_of_replicas": 1    #设置副本数,原索引为1
  },
  "mappings": {
    "properties": {
      "id": {
        "type": "keyword"      #将id字段类型设置为keyword
      },
      "name": {
        "type": "keyword"      #将name字段类型设置为keyword
      },
      "update_time" : {
          "type" : "date",
          "format" : "yyyy-MM-dd'T'HH:mm:ssZ||yyyy-MM-dd'T'HH:mm:ss"
        }
    }
  }
}



创建完成后可执行 GET /new_test_index/_mapping 确认字段是否正确

三、使用reindex迁移数据,(注意:数据库大的话,迁移会比较慢)

本次实测数据,迁移耗时近20分钟,供参考。

ES版本:7.7.1

迁移数据量:7828711

容量大小为 :4.6GB

服务器配置:2核4G     20GiB ESSD云盘

POST /_reindex?wait_for_completion=false
{
  "source": {
    "index": "test_index"         #原索引
  },
  "dest": {
    "index": "new_test_index"     #新索引
  }
}

另提供阿里云ES文档数据供参考:

四:迁移完成后,新索引验证通过后,删除原索引,并将新索引别名(alias)设置为原索引名字

PUT /new_test_index/_alias/test_index     #设置新索引 new_test_index 别名为 test_index


GET /new_test_index/_alias     #查看别名是否成功

#可以看到别名已设置成功
{
  "new_test_index" : {
    "aliases" : {
      "test_index" : { }       #别名已经是test_index
    }
  }
}

至此,本次mapping类型修改完成。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐