Как обновить тип поля elasticsearch
Мне нужно обновить целое число типа elasticsearch integer до long Я пробовал следующий способ, и он не работает
curl -XPUT 'http://localhost:9200/testwork/_mapping/message?ignore_conflicts=true' -d '
{
"message" : {
"properties" : {
"status" : {"type" : "long"}
}
}
}
'
При попытке без параметра ignore_conflicts он получает ошибку, например
{"error":"MergeMappingException[Merge failed with failures {[mapper [status] of different type, current_type [integer], merged_type [long]]}]","status":400}
Но не получить ошибку при использовании параметра ignore_conflicts получил ответ вроде
{"acknowledged":true}
Но тип не изменился для поля состояния. Пожалуйста, помогите мне сделать это.
Ответы
Ответ 1
Невозможно изменить тип данных, если у вас есть данные.
Вам нужно будет удалить свой индекс, создать сопоставление с типом данных, который вы хотите, и переиндексировать свои данные.
Для повторной индексации вам нужно будет экспортировать и повторно импортировать ваши данные - есть несколько инструментов (сканирование и прокрутка и объемный API), чтобы это стало проще, см. переиндексацию ваших данных.
Альтернативой является создание нового индекса, а затем использование aliasing - т.е. при вставке записи в последний индекс (можно использовать псевдоним с одним индексом в он), но при выполнении запроса читайте из псевдонима, который включает все соответствующие индексы (новые и старые версии индекса).