我的索引包含以下文档:
[
{
"field1": "foo",
"field2": "bar"
},
...
]
基本上我需要的是为每个文档添加一个字段field3
,field1
和field2
连接并用分号分隔,如下所示:
[
{
"field1": "foo",
"field2": "bar",
"field3": "foo;bar"
},
...
]
有没有办法将新列添加到我自动从其他字段复制值的所有文档中?
答案 0 :(得分:3)
然后使用以下查询:
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"
}
'