Удалить висящую запись индекса хорька после удаления записи

Я использую ActsAsFerret, который является оболочкой Rails для поисковой системы Ferret на основе Ruby.

Иногда кажется, что запись удаляется с помощью SQL, а не с помощью ActiveRecord (т.е. record.destroy), и когда это происходит, запись индекса остается в индексе Ферре.

Я вижу это в этом примере, где Школа № 136574 оставила запись висячего индекса: В поиске ниже я использую lazy опция, которая гласит: "Просто извлеките данные из индекса Ферре и не ударяйте по базе данных":

>> @schools = School.search(params)
=> [#<FerretResult wrapper for School with id 136574, #<FerretResult wrapper for School with id 55814]
>> @schools.collect(&:id)
ActiveRecord::RecordNotFound: Couldn't find School with ID=136574

Это вызывает серьезную проблему, потому что если вы пытаетесь что-то сделать с результатами, это делает School.find(id), и вы получаете исключение, как описано выше.

я сделал School.rebuild_index, думая, что это исправит, но это не так.

Я могу обойти это - кажется, что вызов .collect результаты были переопределены, чтобы преобразовать их в соответствующий объект (вызывая исключение), и я могу сделать что-то вроде этого:

@schools = @schools.select{|result| School.find_by_id(result.id)};@schools.size

Это работает, но это медленно, и немного боли в заднице.

Кто-нибудь знает способ удаления висящих индексных записей?

0 ответов

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