Я работаю над созданием дампа и обновлением данных Elasticsearch, я могу правильно сбросить данные, но, например, не могу обновить записи.
когда я делаю
GET test/users/3985882
я бы получил следующий ответ
{
"_index": "test",
"_type": "users",
"_id": "3985882",
"_version": 1,
"found": true,
"_source": {
"gender": null,
"user_mixpanel_data": {
"event_name": "Detail",
"time": "2017-07-01 01:37:43 IST",
"email": "[email protected]"
},
"email": "[email protected]",
"user_invoices": [
{
"number": "54539",
"orders": [
{
"order_id": "54539C1"
}
]
}
]
}
}
Теперь, когда я пытаюсь обновить вложенный объект user_invoices
и мне нужно обновить его, я пробую сценарий из следующего вопроса, заданного на SO, т.е. elasticsearch:использовать скрипт для обновления вложенного поля?
Я изменил сценарий в соответствии со своей проблемой.
POST test/users/_update
{
"script": "def updated = false; ctx._source.user_invoices?.each { obj -> if (obj.number == item.number) { obj.number = item.new_number; updated = true;}; if (!updated) { ctx._source.user_invoices = ((ctx._source.user_invoices ?: []) + item)}",
"lang": "painless",
"params": {
"item": {
"number": "54539",
"new_number": "54540",
"order_id": "54539C1",
"new_order_id": "54539C2"
}
}
}
приведенный выше скрипт дает мне следующий ответ
{
"_index": "test",
"_type": "users",
"_id": "_update",
"_version": 28,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": false
}
Здесь ответ показывает, что запрос был успешным, но когда я снова вижу ту же запись, я не получаю обновленный ответ.