有没有办法使用脚本动态添加字段?我正在运行一个脚本来检查字段是否存在。如果没有,则创建它。
我正在尝试:
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 }'
除非我的_source中有一个字段在我的情况下明确命名为attending
,否则我得到:
[Error: ElasticsearchIllegalArgumentException[failed to execute script];
nested: PropertyAccessException[
[Error: could not access: attending; in class: java.util.LinkedHashMap]
答案 0 :(得分:13)
要检查字段是否存在,请使用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"
}'
答案 1 :(得分:0)
我会考虑是否真的有必要查看该字段是否存在。只需将新映射应用于ES,如果需要,它将添加它,如果已存在则不执行任何操作。
我们的系统会在每次应用程序启动时重新应用映射。