Удалить висящую запись индекса хорька после удаления записи
Я использую 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
Это работает, но это медленно, и немного боли в заднице.
Кто-нибудь знает способ удаления висящих индексных записей?