elastic 在我们建立好mapping之后就是不能修改的了。
那么如果当前mapping不能满足我们的需求,比如以前是long,后面发现text更好,那怎么办?
比如以前的index=cc 感觉不好听想改为 index=zbf怎么办?
这里就涉及到一个知识点 reindex 重建索引
例如我现在有个index i_dw_cc_test
get i_dw_cc_test/_mapping
properties" : {
"des" : { "type" : "text" },
"id" : { "type" : "keyword"},
"name" : {"type" : "text" }
}
如何修改mapping呢?
1.创建一个备份index
put i_dw_cc_test_bak
2.迁移原始数据到备份数据index
POST _reindex?refresh=true
{
"source": {
"index": "i_dw_cc_test"
},
"dest": {
"index": "i_dw_cc_test_bak"
}
}get i_dw_cc_test_bak/_count 查询数据是否ok
get i_dw_cc_test_bak/_mapping 查询备份数据的mapping啥样
3.数据已经备份了,将原始数据删掉
delete i_dw_cc_test
4.重新创建 i_dw_cc_test索引 设置好自己想要的mapping 比如我这里都想要text
put i_dw_cc_test
{
"mappings":{
"properties":{
"id":{"type":"text"},
"name":{"type":"text"},
"des":{"type":"text"}
}
}
}
5.继续重复第二部 数据迁移工作,把bak数据迁移到原表
POST _reindex?refresh=true
{
"source": {
"index": "i_dw_cc_test_bak"
},
"dest": {
"index": "i_dw_cc_test"
}
}get i_dw_cc_test/_count 查询数据是否ok
get i_dw_cc_test/_mapping 查询备份数据的mapping啥样
注意这里 不能说我以前字段是des 现在想改为desc。 reindex的时候不管你的字段名。只看source的字段在不在dest里,在就按照你的mapping设置字段类型,不在就只能自己默认keyword了。
总结下这个修改mapping的流程。
1.建立bak索引
2.复制原始数据到bak索引里
3.删除原先索引,重建索引为自己需要的mapping
4.复制bak索引的数据到原始索引。