elasticsearch更新一套

时间:2013-03-03 14:26:29

标签: elasticsearch mvel

我只是在项目不在列表中时才尝试更新列表字段。

错误:

curl -X POST 'http://localhost:9200/my_index/my_doc/id/_update' -d 
'{ "script":
"{if !(ctx._source.my_field contains new_item) {ctx._source.my_field.add(new_item)}}" 
, "params":{"new_item":"hopefully_new_text"}}'

无论如何都会添加项目,即使它存在。

任何更聪明的方法吗?

1 个答案:

答案 0 :(得分:1)

这是关于MVEL解析行为的许多奇怪的事情之一。如果您要移除最外面的{ },您会发现if语句中存在语法错误,如果您将修复该错误,一切都会正常工作:

curl -X POST 'http://localhost:9200/my_index/my_doc/id/_update' -d  '{
    "script": "if (!(ctx._source.my_field contains new_item)) {ctx._source.my_field.add(new_item)}",
    "params": {
        "new_item": "hopefully_new_text"
    }
}
'