Изменение потока структуры полей сопоставления в Elasticsearch - PullRequest
0 голосов
/ 03 августа 2020

У меня есть индекс с сопоставлениями

{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "type": "keyword"
         }
      }
   }
}

В поле location в данный момент мы сохраняем название города. И нам нужно изменить структуру сопоставления, чтобы сохранить также страну и штат, поэтому сопоставление будет

{
   "mappings": {
      "properties": {
         "title": {
            "type": "text"
         },
         "location": {
            "properties": {
                "country": {
                    "type": "keyword"
                },
                "state": {
                    "type": "keyword"
                },
                "city": {
                    "type": "keyword"
                }
            }
         }
      }
   }
}

Каков рекомендуемый поток для такой миграции?

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Elasticsearch не позволяет изменять определение сопоставления для существующих полей, только добавление новых определений полей, как вы можете проверить здесь .

Таким образом, одна из возможностей:

  • создать новое определение поля с другим именем, очевидно, для хранения нового типа данных.

  • Прекратить использование местоположения поле

Другая, но дорогостоящая возможность:

  • создать новый индекс с правильным отображением
  • выполнить переиндексировать данных из старого индекса в новый индекс

Чтобы переиндексировать данные из старого индекса с правильным форматом в новый индекс, вы можете использовать безболезненный сценарий :

POST /_reindex
{
  "source": {
    "index": "old_index_name"
  },
  "dest": {
    "index": "new_index_name"
  },
 "script": {
    "lang": "painless",
     "params" : {
         "location":{
            "country" : null,
             "state": null,
             "city": null
     }
    },
    "source": """
        params.location.city = ctx._source.location
        ctx._source.location = params.location
        
      """
    }
}

После обновления полей страны и штата для старых данных.

Если вам нужно то же имя индекса, используйте новый индекс, который вы создали с правильным сопоставлением, просто в качестве бэкапа то нужно удалить индекс со старым м приложение и воссоздайте его снова с тем же именем, используя правильное сопоставление и перенесите данные, которые находятся в другом резервном индексе.

Подробнее об изменении сопоставления читайте ИЗМЕНИТЬ ЭЛАСТИ C ПОИСК КАРТЫ .

...