@Woice

Как обновить тип поля в маппинге elasticsearch?

Версия пхп - 7.
Версия эластика - 2.3.3

На машине уже было несколько индексов. У меня была задача с помощью специального скрипта создать новый и загрузить его в эластик.

Был сегенерировал файл mapping - данный файл у нас "типовой". В других индексах он такой же, по-идее.
Был сгенерирован файл archive - в котором присутствует запись, вида:
5a16dc251912a325111231.jpeg

Вроде бы, все прошло прекрасно и мой "архив" добавился без ошибок. Однако при поиске эластик сильно ругается, в логах видно вот что:
5a16dc8068188705393952.png
("merging/reducing the aggregations failed when computing the aggregation [Name: Archive, Type: terms] because: the field you gave in the aggregation query existed as two different types in two different indices")

При этом, в маппинге на разных индексах видны различия:
5a16dd180abb4113001141.png5a16dcf586e7b862489909.png

Пытался удалять строку, где у меня long и добавлять снова, ситуация не поменялась.
Пытался выполнять данный скрипт:
curl -XPUT 'localhost:9200/rguu/_mapping/archive?pretty' -H 'Content-Type: application/json' -d'{ "properties": { "sort": { "type": "integer" } }}'
После выполнения пишет, что "все хорошо", однако в маппинге ничего не меняется.

Как его менять вообще? Как его создавать?
Все ли я правильно делаю и понимаю?
  • Вопрос задан
  • 2797 просмотров
Решения вопроса 1
@Woice Автор вопроса
В общем, вопрос решил немного иначе (самый простой и действенный пока).
Так как у меня все индексы создаются по типовым маппингам, которые, почему-то не хавались лишь 1 индексом, то удалось решить проблему через _template.

1. Перед созданием индекса создал шаблон с темплейтом template: "rguu*" и своим "типовым" мапингом.
2. Далее создал индекс rguu_10 (уже 10ая попытка).
3. Для теста залил несколько проблемных типов индекса.

Только такая ситуация смогла создать адекватный индекс и маппинг "подцепился".
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Разочарую - мапинг обновить нельзя! Можно только добавлять новые поля.
Ваши действия - делаем новый индекс с правильным мапингом до заливки данных в этот индекс, переливаем туда старые данные, например через _reindex api - https://www.elastic.co/guide/en/elasticsearch/refe...
И да, агрегации с разными типами одного поля работать не будут.

Как создать мапинг? Отдельная песнь - описана в подробностях здесь - https://www.elastic.co/guide/en/elasticsearch/refe...
Обычно делается перед заливкой данных. Там еще кроме мапинга есть settings - отже отдельная песнь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы