【一次成功】ElasticSearch删除mapping中的字段
下文简称:A源索引B新索引C最终索引创建新索引B:分片数默认5,副本数设置为0,写入更快设置索引B的映射:最终想要的mapping字段结构设置索引B不自动刷新,写入更快设置索引B不动态添加mapping,否则会自动创建旧索引mapping,那不前功尽弃了数据拷贝:A到B wait_for_completion=false不等待,返回taskid,后台执行查看task进度 或 取消task删除索引A
·
本文使用 ElasticSearch-head插件
下文简称:A源索引 B新索引 C最终索引
-
创建新索引B:分片数默认5,副本数设置为0,写入更快
-
设置索引B的映射:最终想要的mapping字段结构
POST 索引B/type名/_mapping { "properties": { "log_request_body": { "type": "text", "fields": { "keyword": { "ignore_above": 256, "type": "keyword" } } }, {更多字段....} } }
-
设置索引B不自动刷新,写入更快
PUT 索引B/_settings { "index": { "refresh_interval": "-1" } }
-
设置索引B不动态添加mapping,否则会自动创建旧索引mapping,那不前功尽弃了
dynamic策略
true:默认值,遇到陌生字段,就动态添加
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错
PUT 索引B/type名/_mapping { "dynamic": "false" }
-
数据拷贝:A到B wait_for_completion=false不等待直接返回taskid,任务后台执行
"size": 5000,以5000个doc为一组进行复制
POST _reindex?wait_for_completion=false { "source": { "index": "log_statistics", "size": 5000 }, "dest": { "index": "log_statistics_new3" } }
-
查看task进度 或 取消task
GET _tasks?detailed=true&actions=*reindex
-
等待复制完成后,删除索引A,释放磁盘空间
shell命令:
curl -XPOST 'http://localhost:9200/源索引A/_forcemerge?only_expunge_deletes=true' curl -XDELETE localhost:9200/源索引A
-
重建与A相同名字的索引C,分片数默认5,副本数设置为0,写入更快
-
设置索引C不自动刷新,写入更快
-
数据拷贝:B到C wait_for_completion=false不等待,返回taskid,后台执行
-
查看task进度
-
删除索引B,释放磁盘空间
-
最终索引C修改回默认设置:自动刷新,动态添加mapping,副本数设置为1
步骤3值改为1s,步骤4值改为true,各执行一次,下面的是设置副本数:PUT 索引C/_settings { "number_of_replicas": 1 }
最后总结:
es并不能直接删除mapping中的字段,只能建一个过度索引,复制数据后再建一个与最开始同名的索引,这样不影响原有代码查询。通过设置别名,会影响代码删除doc。
更多推荐
已为社区贡献2条内容
所有评论(0)