我现在有100GB的ES索引。现在我需要将一个字段更改为多个字段,例如:username
到username.username
和username.raw
(not_analyzed
)。我知道它将适用于传入的数据。但是,如何才能使此更改影响旧数据呢?我应该使用索引滚动将整个索引复制到一个新索引,或者有一个更好的解决方案,只需复制一个归档。
答案 0 :(得分:4)
有一种方法可以使用update by query plugin实现此而无需重新编制索引所有数据。
基本上,在安装插件后,您可以运行以下查询,所有文档都将重新填充多字段。
curl -XPOST 'localhost:9200/your_index/_update_by_query' -d '{
"query" : {
"match_all" : {}
},
"script" : "ctx._source.username = ctx._source.username;"
}'
在100GB文档上运行可能需要一段时间,但在此运行后,将填充username.raw
字段。
注意:要使此插件正常工作,需要scripting enabled。
答案 1 :(得分:-1)
POST index / type / _update_by_query
{
"query" : {
"match_all" : {}
},
"script" :{
"inline" : "ctx._source.username = ctx._source.username;",
"lang" : "painless"
}
}
这对我来说非常适用于5.6,其中一个没有!