Удалить висящую запись индекса хорька после удаления записи - PullRequest
0 голосов
/ 15 мая 2018

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

Иногда кажется, что запись удаляется с помощью 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

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

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

...