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

У меня вопрос об изменении типа поля в моем индексе эластичного поиска с использованием рубинового клиента эластичного поиска.

Я пытаюсь обновить тип поля в моем индексе. Я получаю эту ошибку: 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 через curl, если это возможно), чтобы мой индекс переиндексировался с новым типом поля?

Благодарю.

2 ответа

Решение

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

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

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

Другие вопросы по тегам