SearchKick (Elastic Search) заново переиндексирует определенную запись

Привет, у меня есть одна проблема с переиндексацией записи, которая была переиндексирована ранее с атрибутом, имеющим другой тип данных.

например: пользователь 1 имеет date_of_birth в виде строки во время переиндексации, и теперь я хочу переиндексировать этого пользователя со столбцом datetime, его сбой с ошибкой

"MapperParsingException[failed to parse [dob]]; nested: NumberFormatException"

Пробовал удалить индекс для записи с подпиской и переиндексацией, но не сработало.

User.searchkick_index.remove(user)

person jbmyid    schedule 14.12.2015    source источник


Ответы (1)


Вы не можете изменить тип существующего поля после его создания разрешено лишь несколько изменений. Самый верный способ — стереть ваш индекс и воссоздать его с нуля с правильным отображением.

Временным альтернативным решением является переименование вашего поля, чтобы было создано новое поле с новым типом date.

person Val    schedule 14.12.2015
comment
Проблема в том, что создание поля не находится под нашим контролем. Это динамические поля для переиндексации, которые могут быть добавлены пользователем. - person jbmyid; 14.12.2015
comment
Тогда ваш единственный вариант — стереть ваш индекс, воссоздать его с правильными сопоставлениями и повторно проиндексировать существующие данные. - person Val; 14.12.2015
comment
Это ужасно, только для одной записи весь реиндекс. - person jbmyid; 15.12.2015
comment
Elasticsearch — это не волшебная палочка :-) Это может быть только одна запись, но вам нужно контролировать типы полей, которые вы создаете. Если вы этого не сделаете, вы попадете в ситуацию, подобную этой. После создания поля заданного типа есть очень мало возможностей изменить его тип. - person Val; 15.12.2015
comment
Мне понравилась концепция наличия отдельных полей для типов данных, например: rating.int. Попробую это, но потребуется много изменений в коде. Спасибо за ссылку и предложение. - person jbmyid; 15.12.2015
comment
Мультиполя действительно являются одним из способов решить эту проблему, но без надлежащего курирования поля они также могут довольно быстро выйти из-под контроля. Определенно стоит исследовать. - person Val; 15.12.2015