es删除字段
修行者12138关注
2020.12.14 20:53:55字数 432阅读 8,123
原索引mappings如下,有full_name和short_name两个字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "audit_demo": { "mappings": { "_doc": { "properties": { "full_name": { "type": "text", "analyzer": "ik_max_word" }, "short_name": { "type": "keyword" } } } } } }
|
想要删掉short_name字段,修改后mappings如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "audit_demo_bak": { "mappings": { "_doc": { "properties": { "full_name": { "type": "text", "analyzer": "ik_max_word" } } } } } }
|
步骤1 删除原索引中待删除字段的数据
注意
1.只是删除数据,不是删除字段
2.如果不删除字段数据,后面reindex时依然会把待删除字段的值带到新索引,即使设置新索引的dynamic为false
1 2 3 4 5 6 7 8 9 10
| POST {{di}}/audit_demo/_update_by_query { "script": { "lang": "painless", "inline": "ctx._source.remove(\"short_name\")" }, "query": { "match_all": {} } }
|
步骤2 新建一个索引,索引结构在原索引上删除short_name字段
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| PUT {{di}}/audit_demo_bak { "settings": { "number_of_shards": "2", "number_of_replicas": "2", "max_result_window": 100000, "analysis": { "analyzer": { "ik": { "tokenizer": "ik_max_word" } } } }, "mappings": { "_doc": { "properties": { "full_name": { "type": "text", "analyzer": "ik_max_word" } } } } }
|
步骤3 同步数据
1 2 3 4 5 6 7 8 9
| POST {{di}}/_reindex { "source": { "index": "audit_demo" }, "dest": { "index": "audit_demo_bak" } }
|
步骤4 删除原索引
1
| DELETE {{di}}/audit_demo
|
步骤5 新建一个名为原索引名的索引,reindex同步数据,然后删除步骤2新建的索引
注意事项
步骤4和步骤5,这两个步骤,耗时较长,在这段时间,索引是不可用的,一般在业务低峰期执行操作没啥问题。如果想要减少索引不可用的时间,有以下两个方案
方案1
删除原索引后,为新索引设置别名为原索引
备注:原索引未删除时,为新索引设置别名为原索引会报错
1
| PUT {{di}}/audit_demo_bak/_alias/audit_demo
|
方案2
步骤1开始之前,就为原索引设置别名,应用程序通过别名访问索引,步骤4开始之前,删除原索引与别名的关系,新增新索引与别名的关系,应用程序通过别名可以访问到新索引。
虽然这两个步骤的耗时极小,但是还是有可能在这段期间有数据更改,所以还是尽量在业务低峰期操作。