2016-06-08 2 views
2

Это мой документElasticsearch сценарии: обновление значения массива

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

Я хочу, чтобы найти элемент в поле массива «б» и обновить весь объект. Я пробовал этот скрипт, но он не обновляется. Есть идеи?

{ 
    "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" 
} 

ответ

5

Используйте вместо этого:

{ 
    "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

спасатель, спасибо !!!! – user3658423

Смежные вопросы