方式一:1. 创建新索引
PUT test.project.20220507
{
"mappings":{
"properties":{
"code":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
},
"analyzer":"sdm_tokenizer"
},
"type":{
"properties":{
"id":{
"type":"text"
},
"name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"display_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"child_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
}
}
}
}
}
}
2.复制数据?
POST _reindex
{
"source":{
"index":"source.project"
},
"dest":{
"index":"test.project.20220507",
"op_type":"create"
}
}
?其中source为原来索引数据,dest为新索引
3.切换索引
POST /_aliases
{
"actions":[
{
"add":{
"index":"test.project.20220507",
"alias":"source.project"
}
},
{
"remove_index":{
"index":"source.project"
}
}
]
}
?其中index为新索引,alias? 定义别名,这里的别名为旧索引的名字,remove_index:删除之前那个旧索引,保证新索引的别名顺利创建。
利用别名切换索引,可以保证不重启线上服务的情况,切换到新索引,1,2步骤非必须,除非新旧索引是因为mapping里面定义的字段类型不一样,才需要执行;单独执行步骤2的话,只是复制数据,但不复制mapping
方式二:备份旧索引的mapping,在利用别名切换索引
?1.先决条件,要改成只读
PUT /source.project/_settings
{
"settings": {
"index.blocks.write": true
}
}
2.复制索引跟mapping
POST /source.project/_clone/test.project.20220507
3. 恢复原先索引
PUT /source.project/_settings
{
? "settings": {
? ? "index.blocks.write": false
? }
}
4. 利用方式一的第三步骤,切换索引
方式二个人理解适用于索引数据有问题,mapping无需更新的情况下,可直接复制mapping,然后修改同步工具?
|