目录

一、背景介绍

二、重建索引

第一步:给要重建的索引起别名,如果已经有了可以忽略这一步。

第二步:建立新的mapping

第三步:查看新建立的mapping

 第四步:同步数据到新的mapping

第五步:查看进度

 第六步:新的索引添加别名,旧的索引去除别名

第七步: 删除旧的索引

三、测试


一、背景介绍

es根据条件查询数据,需要先定义mapping。后面由于业务的需要,添加或者更新mapping,需要重建索引。es没有直接更新mapping的操作,想要添加新的字段只能重建索引。整个过程类似于Mysql 的添加字段的过程。需要重建的索引,线上使用的一定是索引的别名。因为改索引重建完成之后会被删除。

⚠️注意

          线上使用的是索引的别名。

          线上使用的是索引的别名。。

          线上使用的是索引的别名。。。

二、重建索引

第一步:给要重建的索引起别名,如果已经有了可以忽略这一步。

# 第一步
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "index-old",
        "alias": "index-alias"
      }
    }
  ]
}

第二步:建立新的mapping

PUT /index-new
{
  "settings" : {
       # 分片数
      "number_of_shards" : 4,
       # 副本数
      "number_of_replicas" : 1
   },
    "mappings" : {
      "origin" : {
        "properties" : {
         "name" : {
            "type" : "keyword"
          },
          "text" : {
            "type" : "text",
            "analyzer" : "ik_smart"
          },
          "age" : {
            "type" : "integer"
          },
          "number" : {
            "type" : "long"
          }
        }
      }
    }
}

第三步:查看新建立的mapping

GET /index-new/_mapping

 第四步:同步数据到新的mapping

POST /_reindex
{
	"source": {
		"index": "index-old"
	},
	"dest": {
		"index": "index-new"
	}
}

第五步:查看进度

GET _tasks?detailed=true&actions=*reindex&human

 第六步:新的索引添加别名,旧的索引去除别名

POST /_aliases
{
	"actions": [{
			"add": {
				"index": "index-new",
				"alias": "index-alias"
			}
		},
		{
			"remove": {
				"index": "index-old",
				"alias": "index-alias"
			}
		}
	]
}

第七步: 删除旧的索引

DELETE /index-old

三、测试

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐