Как обновить тип поля Elasticsearch с помощью Chewy - PullRequest
0 голосов
/ 24 октября 2018

У меня вопрос об изменении типа поля в моем индексе эластичного поиска с использованием клиента Rubyasticsearch 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 ]

0 голосов
/ 25 октября 2018

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

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

0 голосов
/ 24 октября 2018

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

...