我在数据库中索引了一个 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
其他随机搜索词可以返回准确的结果。
所以这基本上是随机搜索词产生的随机错误。这可能是什么原因造成的?
Controller :
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
最佳答案
发生这种情况是因为您正在使用 load => true 选项从数据库加载搜索结果。 DB中好像没有activerecord,但是elasticsearch索引里面有同样的文档。
恕我直言,Reindex 并不总是解决方案。
最好的解决办法是在db中删除文档的时候再删除。您可以为此使用 after_destroy 回调。
Tire remove api 用于从索引中删除单个文档。
Tire.index('my-index-name').remove('my-document-type', 'my-document-id')
关于ruby-on-rails - rails 轮胎 elasticsearch 奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15026612/