eliminar objetos de la búsqueda elástica de matriz
He requerido eliminar el objeto de la matriz que satisface la condición, puedo actualizar el objeto de la matriz en función de la condición, que es la siguiente:
PUT twitter/twit/1
{"list":
[
{
"tweet_id": "1",
"a": "b"
},
{
"tweet_id": "123",
"a": "f"
}
]
}
POST /twitter/twit/1/_update
{"script":"foreach (item :ctx._source.list) {
if item['tweet_id'] == tweet_id) {
item['new_field'] = 'ghi';
}
}",
"params": {tweet_id": 123"}
}
esto esta funcionando
para eliminar estoy haciendo esto
POST /twitter/twit/1/_update
{ "script": "foreach (item : ctx._source.list) {
if item['tweet_id'] == tweet_id) {
ctx._source.list.remove(item);
}
}",
"params": { tweet_id": "123" }
}
pero esto no funciona y da este error,
ElasticsearchIllegalArgumentException [no se pudo ejecutar el script]; anidado: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException [no se pudo ejecutar el script]; anidado: ConcurrentModificationException
Puedo eliminar toda la matriz o todo el campo usando
"script": "ctx._source.remove('list')"
También puedo eliminar objetos de la matriz especificando todas las claves de un objeto usando
"script":"ctx._source.list.remove(tag)",
"params" : {
"tag" : {"tweet_id": "123","a": "f"}
mi módulo de nodo la versión de búsqueda elástica es 2.4.2 el servidor de búsqueda elástica es 1.3.2