如何将ElasticSearch字段复制到另一个字段

时间:2015-10-22 22:22:10

标签: elasticsearch

我现在有100GB的ES索引。现在我需要将一个字段更改为多个字段,例如:usernameusername.usernameusername.rawnot_analyzed)。我知道它将适用于传入的数据。但是,如何才能使此更改影响旧数据呢?我应该使用索引滚动将整个索引复制到一个新索引,或者有一个更好的解决方案,只需复制一个归档。

2 个答案:

答案 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,其中一个没有!