重命名elasticsearch中的字段 [英] Renaming fields in elasticsearch
本文介绍了重命名elasticsearch中的字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个这样的文档
{
"_index": "testindex",
"_type": "logs",
"_id": "1",
"_score": 1,
"_source": {
"field1": "data1",
"field2": "data2"
}
}
我需要将 field2
更改为 Request.field3
{
"_index": "testindex",
"_type": "logs",
"_id": "1",
"_score": 1,
"_source": {
"field1": "data1",
"Request": {
"field3": "data2"
}
}
}
为此,首先添加一个字段映射到现有索引
For this, first added a field mapping to existing index
PUT testindex/_mapping/logs
{
"properties":
{
"Request":
{
"properties":
{
"field3" :
{
"type": "string"
}
}
}
}
}
然后尝试重新索引
POST _reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex1"
},
"script": {
"inline": "ctx._source.Request.field3 = ctx._source.remove("field2")"
}
}
错误是
"reason": "failed to run inline script [ctx._source.Request.field3 = ctx._source.remove("field2")] using lang [groovy]",
"caused_by": {
"type": "null_pointer_exception",
"reason": "Cannot set property 'field3' on null object"
}
推荐答案
Request
字段在您的文档中尚不存在,因此您的脚本需要先创建它:
The Request
field does not yet exist in your documents, so your script needs to create it first:
POST _reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex1"
},
"script": {
"inline": "ctx._source.Request = [:]; ctx._source.Request.field3 = ctx._source.remove("field2") ]"
}
}
或者像这样短一点:
POST _reindex
{
"source": {
"index": "testindex"
},
"dest": {
"index": "testindex1"
},
"script": {
"inline": "ctx._source.Request = [field3: ctx._source.remove("field2") ]"
}
}
这篇关于重命名elasticsearch中的字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文