添加从其他字段复制数据的字段

时间:2016-06-24 02:40:54

标签: elasticsearch

我的索引包含以下文档:

[
    {
        "field1": "foo",
        "field2": "bar"
    },
    ...
]

基本上我需要的是为每个文档添加一个字段field3field1field2连接并用分号分隔,如下所示:

[
    {
        "field1": "foo",
        "field2": "bar",
        "field3": "foo;bar"
    },
    ...
]

有没有办法将新列添加到我自动从其他字段复制值的所有文档中?

3 个答案:

答案 0 :(得分:3)

  • 对于1.x版本的投票,请使用Update by query插件和
  • 对于大于2.3的版本,请使用elasticsearch提供的this

然后使用以下查询:

POST /my_index/my_type/_update_by_query
{
"query": {
  "match_all": {}
},
"script": "ctx._source.field3 = ctx._source.field1 + ';' + ctx._source.field2"
}

确保在scripting中启用elasticsearch.yml并重新启动ES。

这不需要重新编制索引

希望这适合你。

答案 1 :(得分:0)

最新(6.7)个ElasticSearch在copy_to中支持mapping。它没有说明添加定界符,但是可以尝试使用它。如果是这样,那将很整洁。 https://www.elastic.co/guide/en/elasticsearch/reference/current/copy-to.html

答案 2 :(得分:0)

此外,我们可以使用curl在json中创建一个新字段。

curl -X POST "localhost:9200/your-index/_update_by_query" -H 'Content-Type: application/json' -d'
{
"query": {"match_all": {}
         },
"script": "ctx._source.newfield = ctx._source.data_field1 + ';' + ctx._source.data_field2"
}
'