Как обновить тип поля Elasticsearch с помощью Chewy

Мой вопрос заключается в изменении типа поля в моем индексе elasticsearch с использованием рутинного клиента elasticsearch ruby.

Я пытаюсь обновить тип поля в моем индексе. Я получаю эту ошибку: illegal_argument_exception .

Я прочитал, что невозможно изменить тип в существующем индексе, поэтому я думал о переиндексации всего: rake chewy:reset . Я пробовал много вещей ... Я не могу заставить свою переиндексацию работать.

Подробная ошибка:

Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"mapper [enabled] cannot be changed from type [text] to [boolean]"}],"type":"illegal_argument_exception","reason":"mapper [enabled] cannot be changed from type [text] to [boolean]"},"status":400}

Мой индекс, как и раньше (по умолчанию был включен texte):

class SearchIndex < Chewy::Index
  define_type Company, delete_if: :deleted_at do
    ...
    field :enabled
    ...
  end
end

Мой индекс, как я хочу, это:

class SearchIndex < Chewy::Index
  define_type Company, delete_if: :deleted_at do
    ...
    field :enabled, type: 'boolean'
    ...
  end
end

Как я могу сделать с Chewy (не запрашивая ElasticSearch через завиток, если это возможно), чтобы мой индекс был повторно проиндексирован с новым типом поля?

Благодарю.

Всего 2 ответа


Я раньше не использовал Chewy, но, глядя на документацию, вы должны просто позвонить SearchIndex.reset! в рубиновой консоли. Конечно, удаление и воссоздание индекса возможно и должно быть воссоздано с нуля с новым типом данных.


Я узнал, почему Elsaticsearch не хотел, чтобы я менял свой тип. Это потому, что мой индекс получил некоторый другой тип, содержащий одно и то же поле (по крайней мере одно и то же имя поля), но с другим типом поля.

Итак, все одноименные поля должны иметь один и тот же тип. Затем вы сможете (и вам придется) удалить свой индекс и воссоздать его. ( SearchIndex::purge! Выполняет эту работу)


Есть идеи?

10000