Objekte aus dem Array entfernen elastische Suche
Ich muss ein Objekt aus dem Array entfernen, das die Bedingung erfüllt. Ich kann das Objekt des Arrays auf der Grundlage der folgenden Bedingung aktualisieren:
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"}
}
dies arbeitet
für entfernen mache ich das
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" }
}
aber das funktioniert nicht und gibt diesen Fehler,
ElasticsearchIllegalArgumentException [Skript konnte nicht ausgeführt werden]; verschachtelt: ConcurrentModificationException; Fehler: ElasticsearchIllegalArgumentException [Skript konnte nicht ausgeführt werden]; verschachtelt: ConcurrentModificationException
Ich kann ein ganzes Array oder ein ganzes Feld mit @ entfern
"script": "ctx._source.remove('list')"
Ich kann ein Objekt auch aus dem Array entfernen, indem ich alle Schlüssel eines Objekts mit @ spezifizier
"script":"ctx._source.list.remove(tag)",
"params" : {
"tag" : {"tweet_id": "123","a": "f"}
Mein Knotenmodul Elastic Search Version ist 2.4.2 Elastic Search Server ist 1.3.2