Сопоставление нельзя изменить для уже существующих полей. Вам нужно будет создать новый индекс (с правильным отображением) и переместить документы из старого индекса в новый индекс. Вы можете удалить старый индекс и использовать псевдоним, чтобы имя индекса не изменялось
- (отображение) [https://www.elastic.co/blog/changing-mapping-with-zero-downtime]
- (переиндексирование) [https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html]
- (Псевдоним) [https://www.elastic.co/guide/en/elasticsearch/reference/6.2/indices-aliases.html] отл.
Старый индекс index35 с отображением ниже
PUT index35
{
"mappings": {
"properties": {
"ExistingField": {
"type": "date"
}
}
}
}
Запрос: запрос ниже ничего не даст
GET index35/_search
{
"stored_fields": [
"CopiedField"
],
"query": {
"match_all": {}
}
}
Создать новый индекс
PUT index36
{
"mappings": {
"properties": {
"ExistingField": {
"type": "date",
"copy_to": "CopiedField"
},
"CopiedField": {
"type": "date",
"store": true
}
}
}
}
Переместить старые документы в новые документы
POST _reindex
{
"source": {
"index": "index35"
},
"dest": {
"index": "index36" ----> must be created before reindex
}
}
Убедитесь, что количество документов одинаково как в старом, так и в новом индексе (для предотвращения потери данных)
Удалить староеindex: -DELETE index35
Создать псевдоним для нового индекса (дать старое имя), чтобы поисковые запросы не затрагивались
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "index36", "alias" : "index35" } }
]
}
Старый запрос теперь будет возвращать результаты