1

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

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

我可以在这个例子中看到它,其中 School #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

这确实有效,但速度很慢,而且有点让人头疼。

有谁知道删除悬挂索引记录的方法?

4

0 回答 0