3

我已经在数据库Car中用一条汽车记录索引了一个模型。mercedes benz如果我搜索这个词,benz我会得到一个错误:

ActiveRecord::RecordNotFound in CarsController#index

Couldn't find all Cars with IDs (1, 3) (found 1 results, but was looking for 2)

如果我搜索hello我得到:

Couldn't find Car with id=2

其他随机搜索词可以返回准确的结果。

所以它基本上是随机搜索词产生的随机错误。这可能是什么原因?

控制器:

def index
 if params[:query].present?
    @cars = Car.search(params)
 else
    @cars = Car.paginate(:page => params[:page], :per_page => 10)
 end    
end

模型:

  def self.search(params)
   tire.search(load: true, page: params[:page], per_page: 10) do |s|
    s.query { string params[:query]} if params[:query].present?
   end
  end
4

1 回答 1

3

发生这种情况是因为,您正在使用 load => true 选项从数据库加载搜索结果。数据库中似乎缺少活动记录,但弹性搜索索引包含相同的文档。

恕我直言,重新索引并不总是解决方案。

最好的解决方案是在 db 中删除文档时将其删除。您可以为此使用 after_destroy 回调。

Tire remove api 用于从索引中删除单个文档。

Tire.index('my-index-name').remove('my-document-type', 'my-document-id')

参考:https ://github.com/karmi/tire/issues/43

于 2013-04-20T06:54:00.560 回答