我一直在使用以下查询重命名fieldName。
POST http://localhost:9200/INDEX_NAME/_update_by_query
{
"query": {
"exists": {
"field": "NEW_FIELD_NAME"
}
},
"script" : {
"inline": "ctx._source.NEW_FIELD_NAME = ctx._source.OLD_FIELD_NAME; ctx._source.remove(\"OLD_FIELD_NAME\");"
}
}
但是超过420万的数据。大概要2-3分钟。
有没有办法缩短持续时间?
ElasticSearch版本是5.6.4
发布于 2022-03-09 09:31:36
大卫对讨论的回答是很难的。如果您正在寻找一种简单的方法,并且您的索引有超过一个主碎片,那么您可以使用切片来并行化工作:
POST http://localhost:9200/INDEX_NAME/_update_by_query?slices=auto&wait_for_completion=false
{
...
}
但大卫是对的,你应该在某个时候升级;-)
发布于 2022-03-09 10:38:20
一种完全不同的方法可以确保零停机时间,那就是首先使用更新的字段名创建一个新的索引映射。
之后,可以使用reindex API将数据填充到这个新索引中。https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html
假设您使用的是别名,则一旦完成重新索引,就可以更新此别名的基础索引。这将确保应用程序中没有使用这些数据的停机时间。Reindex API还支持各种conf参数,以使索引过程更快。
https://stackoverflow.com/questions/71404816
复制相似问题