因为
message_id是
string您的脚本,所以需要对其进行说明并按如下方式进行修改(请参见该
message_id字段周围的转义双引号)。还有第二种错字,就是您的映射声明了一个
message_id字段,但您
_message_id在脚本中将其命名为:
"for (int i = 0; i < ctx._source.messages.size(); i++){if(ctx._source.messages[i].message_id == "" + messageId + "")" ^ ^ ^ | | | no underscore here add escaped double quotes最后,还要确保在ES配置中启用了动态脚本
更新
您可以尝试从列表中删除元素的“常规”方式,即不再使用
forloop和
if,只需使用常规功能即可:
"ctx._source.messages.removeAll{ it.message_id == "" + messageId + ""}"通常,这将
messages通过删除其
message_id字段与
messageId值匹配的所有元素来修改数组。



