Чтобы удалить любое поле со значением из всех документов без удаления всего документа из индекса Elasticsearch, обычно я использую _update_by_query
вызов API с script
Например: в my_properties index Я хочу удалить все поля, например (ключ => значение) из всех документов, в которых он существует.Используя приведенный ниже запрос, я могу удалить все поля feed там, где оно есть, но в этом случае поле feed будет text / string type
Индекс : my_properties
Поле : канал
Тип : текст
Пример Значение на канале: feed: ["AB-1234"]
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.remove('feed')",
"query" : {
"exists": { "field": "feed" }
}
}
Моя основная проблема заключается в том, что мой тип поля вложенный вместо text / string
Индекс : my_properties
Поле : feed_v2
Тип : вложенный
Пример значения в feed_v2: feed_v2: [{"feed":12},{"id":["AB-9999"]}]
Подход 1:
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.remove('feed_v2')",
"query" : {
"exists": { "field": "feed_v2" }
}
}
Подход 2:
POST my_properties/_update_by_query?refresh&conflicts=proceed
{
"script" : "ctx._source.feed_v2.remove('feed')",
"query" : {
"exists": { "field": "feed_v2.feed" }
}
}
Ничегоработает, я что-то упустил?Не уверен, но я предполагаю -
"query" : {"exists": { "field": "feed_v2" }}
запрос существует не работает так же, как с полем вложенного типа , поэтому он не находитчто-нибудь при попытке удалить в nested
поле типа
Согласно Ref: https://stackoverflow.com/a/53771354/1138192 Это должно работать для меня, но, увы, это не работает для меня.