#elasticsearch #kibana #elasticsearch-painless
Вопрос:
Интересно, знает ли кто-нибудь, почему это обновление по запросу выполняется нормально, но ничего не удаляется, даже если задача выполняется до завершения и утверждает, что все записи обновлены? Я могу использовать один и тот же синтаксис для удаления всех объектов person без каких-либо проблем. Почему ES не удаляет свойства объекта?
POST /16cf303e902f4445a560a8e9a5b9ea51/_update_by_query?conflicts=proceedamp;wait_for_completion=false
{
"conflicts": "proceed",
"query": {
"exists": {
"field": "person.hair_color"
}
},
"script": {
"lang": "painless",
"source": "ctx._source.remove('person.hair_color');"
}
}
Теперь, если я посмотрю задачу, используя идентификатор, возвращенный из приведенного выше вызова
GET /_tasks/qLeuj8jqQgOPFGsEzL7u9Q:1776664
Я получаю эту (сокращенную версию), утверждающую, что все документы были обновлены. Однако по какой-то причине у всех людей все еще есть цвет волос.
{
"completed" : true,
"task" : {
"status" : {
"updated" : 110345,
}
}
Спасибо за любые рекомендации!
Ответ №1:
Наконец-то я это понял! По-видимому, _source содержит все объекты в вашем документе. Поэтому, чтобы удалить свойство объекта, вам необходимо запустить:
POST /16cf303e902f4445a560a8e9a5b9ea51/_update_by_query?conflicts=proceedamp;wait_for_completion=false
{
"conflicts": "proceed",
"query": {
"exists": {
"field": "person.hair_color"
}
},
"script": {
"lang": "painless",
"source": "ctx._source.person.remove('hair_color');"
}
}
Это работает, если у кого-то такая же проблема!