铁路轮胎弹性研究奇怪的错误

时间:2013-02-22 14:39:23

标签: ruby-on-rails ruby-on-rails-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

1 个答案:

答案 0 :(得分:3)

这是因为您正在使用load =>从数据库加载搜索结果的true选项。 DB中似乎缺少activerecord,但elasticsearch索引包含相同的文档。

Reindex并不总是解决方案恕我直言。

最佳解决方案是在db中删除文档时删除该文档。您可以使用after_destroy回调。

轮胎删除api用于从索引中删除单个文档。

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

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