Как обновить тип поля 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!
в рубиновой консоли. Конечно, удаление и воссоздание индекса возможно и должно быть воссоздано с нуля с вашим новым типом данных.