Как я могу обновить данные, используя update_by_query в Elasticsearch 2.x?
Мне нужно несколько обновлений документов в эластичном по некоторому запросу. Я нашел одно решение. Как это:
{
"query": {
"term": {
"name": "some name"
}
},
"script": {
"inline": "ctx._source.some_field = \"value\""
}
}
Но это не совсем то, что мне нужно. Потому что один запрос обновит 10 или 20 полей, например. Поэтому неудобно генерировать строку "script" для многих полей. В идеале мне нужно что-то вроде этого:
{
"query": {
"term": {
"name": "some name"
}
},
"doc": {
"field1": "value1",
"field2": "value2",
"field3": "value3",
"field4": "value4",
"field5": "value5",
...
"fieldN": "valueN",
}
}
Для того, чтобы реализовать что-то подобное выше, я был бы признателен за альтернативу
1 ответ
Решение
Вы можете использовать скрипт как этот:
"script": {
"inline": "fieldsAndValues.each{ k, v -> ctx._source[k] = \"${v}\" }",
"lang": "groovy",
"params": {
"fieldsAndValues": {
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
}
}