I erforderlich sind Gegenstand von Array zu entfernen, die die Bedingung erfüllt, ich bin in der Lage, das Objekt von Array auf der Grundlage der Bedingung zu aktualisieren, die wie folgt lautet:Objekte aus Array Elasticsearch entfernen
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"}
}
dieses arbeitet ich dieses
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" }
}
für entfernen tue, aber das funktioniert nicht, und diesen Fehler geben,
ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException; Error: ElasticsearchIllegalArgumentException[failed to execute script]; nested: ConcurrentModificationException
Ich bin in der Lage ganze Reihe oder ganze Feld zu entfernen, mit
"script": "ctx._source.remove('list')"
Ich bin auch durch die Angabe alle Schlüssel eines Objekts mit
"script":"ctx._source.list.remove(tag)",
"params" : {
"tag" : {"tweet_id": "123","a": "f"}
mein Knotenobjekt aus dem Array entfernen können Modul elastische Suche Version ist 2.4.2 elastische Suche Server ist 1.3.2
Dank Andrei Stefan existiert, das funktioniert, wenn die Liste nur ein Objekt von tweet_id = 123 enthält , aber das funktioniert nicht, wenn ich mehrere Objekte entfernen möchte, die die selbe tweet_id = 123 haben, was habe ich dafür zu tun ??? –
Nun, das ist einfach. Sehen Sie meine aktualisierte Antwort. –
Außerdem würde ich mich freuen, wenn Sie die Antwort verbessern könnten. –