删除记录后删除悬挂雪貂索引条目

时间:2018-05-15 08:22:47

标签: ruby ferret acts-as-ferret

我正在使用ActsAsFerret,它是基于Ruby的Ferret搜索引擎的Rails包装器。

有时似乎使用SQL而不是通过ActiveRecord(即record.destroy)删除记录,并且当发生这种情况时,索引条目将保留在Ferret索引中。

我可以在这个例子中看到它,其中School#136574留下了悬挂的索引条目:在下面的搜索中,我使用lazy选项,其中显示“只是从Ferret索引中获取数据并且不要打扰数据库“:

>> @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 个答案:

没有答案