ES 重建索引的过程
一、背景介绍es根据条件查询数据,需要先定义mapping。后面由于业务的需要,添加或者更新mapping,需要重建索引。es没有直接更新mapping的操作,想要添加新的字段只能重建索引。整个过程类似于Mysql 的添加字段的过程。需要重建的索引,线上使用的一定是索引的别名。因为改索引重建完成之后会被删除。⚠️注意线上使用的是索引的别名。线上使用的是索引的别名。。线上使用的是索引的别名。。。二、
·
目录
一、背景介绍
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
三、测试
更多推荐
已为社区贡献1条内容
所有评论(0)