用于将对象字段添加到文档中的 elasticsearch 无痛脚本
elasticsearch painless script to add object field into document
我有一个相当基本的要求,我想在更新查询中无痛地向文档添加一个对象。
这是我要添加的对象
"memoire": {
"codeActe": "C",
"docType": "M",
"uuid": "added ",
"nonFacturable": false,
"published": false
},
我试过了
POST /csa_encounters/_update_by_query
{
"script":
{ "source": """
ctx._source.memoire.codeActe = "C";
ctx._source.memoire.docType= "M";
ctx._source.memoire.uuid = "added ";
ctx._source.memoire.nonFacturable = false;
ctx._source.memoire.published =false
""",
"lang": "painless"
},
"query": {
"bool" : {
"must" : [
{ "query_string" : { "query" : "140c7646", "fields" : [ "_id" ] } }
]
}
}
}
但是我收到消息空指针异常,因为该字段当然不存在
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"ctx._source.memoire.codeActe = \"C\";\n ",
" ^---- HERE"
],
...
"lang": "painless",
"caused_by": {
"type": "null_pointer_exception",
"reason": null
}
},
"status": 400
如果对象不存在,我不知道如何将其创建为新字段。
这是因为 memoire
字段在您的文档中不存在。
因此,只需在脚本的开头添加以下行:
if (ctx._source.memoire == null) {
ctx._source.memoire = [:];
}
我有一个相当基本的要求,我想在更新查询中无痛地向文档添加一个对象。
这是我要添加的对象
"memoire": {
"codeActe": "C",
"docType": "M",
"uuid": "added ",
"nonFacturable": false,
"published": false
},
我试过了
POST /csa_encounters/_update_by_query
{
"script":
{ "source": """
ctx._source.memoire.codeActe = "C";
ctx._source.memoire.docType= "M";
ctx._source.memoire.uuid = "added ";
ctx._source.memoire.nonFacturable = false;
ctx._source.memoire.published =false
""",
"lang": "painless"
},
"query": {
"bool" : {
"must" : [
{ "query_string" : { "query" : "140c7646", "fields" : [ "_id" ] } }
]
}
}
}
但是我收到消息空指针异常,因为该字段当然不存在
"type": "script_exception",
"reason": "runtime error",
"script_stack": [
"ctx._source.memoire.codeActe = \"C\";\n ",
" ^---- HERE"
],
...
"lang": "painless",
"caused_by": {
"type": "null_pointer_exception",
"reason": null
}
},
"status": 400
如果对象不存在,我不知道如何将其创建为新字段。
这是因为 memoire
字段在您的文档中不存在。
因此,只需在脚本的开头添加以下行:
if (ctx._source.memoire == null) {
ctx._source.memoire = [:];
}