1

仅当项目不在列表中时,我才尝试更新列表字段。

有什么问题:

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"}}'

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

有什么更聪明的方法吗?

4

1 回答 1

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"
    }
}
'
于 2013-03-03T17:18:46.067 回答