2016-06-08 8 views
2

Dies ist mein DokumentElasticsearch Scripting: Aktualisieren von Array-Wert

{ 
    "name": "andrew", 
    "b": [{"x":"c1", "y": 0}, {"x":"c2", "y": 0}] 
} 

I-Element in dem Array-Feld "b" finden will und das gesamte Objekt zu aktualisieren. Ich habe dieses Skript ausprobiert, es wird jedoch nicht aktualisiert. Irgendwelche Ideen? diese

{ 
    "script": "for (item in ctx._source.b) { if (item['x'] == x_id) { item = newobj; } };", 
    "params": { 
     "x_id": "c1", 
     "newobj" : {"x":"c1", "y": 4222} 
    }, 
    "lang":"groovy" 
} 

Antwort

5

Verwenden statt:

{ 
    "script": "for (int i=0;i<ctx._source.b.size();i++) { item=ctx._source.b[i]; if (item['x'] == x_id) { ctx._source.b[i] = newobj} };", 
    "params": { 
    "x_id": "c1", 
    "newobj": { 
     "x": "c1", 
     "y": 4222 
    } 
    }, 
    "lang": "groovy" 
} 
+0

Lebensretter, danke !!!! – user3658423