Как обновить тип поля 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 - т.е. при вставке записи в последний индекс (можно использовать псевдоним с одним индексом в он), но при выполнении запроса читайте из псевдонима, который включает все соответствующие индексы (новые и старые версии индекса).