Elasticsearch - 如果不存在,则使用脚本创建字段

Mar*_*ruf 5 field elasticsearch

有没有办法使用脚本动态添加字段?我正在运行一个脚本来检查字段是否存在.如果没有,则创建它.

我正在尝试:

script: 'if (ctx._source.attending == null) { ctx._source.attending = { events: newField } } else if (ctx._source.attending.events == null) { ctx._source.attending.events = newField } else { ctx._source.attending.events += newField }'
Run Code Online (Sandbox Code Playgroud)

除非我的_source中有一个字段在我的情况下明确命名attending,否则我得到:

[Error: ElasticsearchIllegalArgumentException[failed to execute script];
nested: PropertyAccessException[
    [Error: could not access: attending; in class: java.util.LinkedHashMap]
Run Code Online (Sandbox Code Playgroud)

Oll*_*ank 14

要检查字段是否存在,请使用该ctx._source.containsKey函数,例如:

curl -XPOST "http://localhost:9200/myindex/message/1/_update" -d'
{
   "script": "if (!ctx._source.containsKey(\"attending\")) { ctx._source.attending = newField }",
   "params" : {"newField" : "blue" },
   "myfield": "data"
}'
Run Code Online (Sandbox Code Playgroud)