我正在使用acts_as_solr在项目中进行搜索。不幸的是,在保存模型时,关联模型的索引似乎没有更新。
示例:
我有三个模型:
class Merchant < ActiveRecord::Base
acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
...
end
class Coupon < ActiveRecord::Base
acts_as_solr :fields => [:store_name, :url, :code, :description]
...
end
class Tag < ActiveRecord::Base
acts_as_solr :fields => [:name]
...
end我使用下面这行代码来执行搜索:
Merchant.paginate_by_solr(params[:q], :per_page => PER_PAGE, :page => [(params[:page] || 1).to_i, 1].max)但是,由于某种原因,在我添加了一个在描述中包含单词“鞋”的优惠券后,查询“鞋”不会返回与优惠券相关联的商家。关联都起作用了,如果我运行rake solr:reindex,搜索就会返回新的优惠券。
我是否需要在每次创建新的优惠券时更新Merchant的索引?我是否必须更新整个类的索引,或者我可以只更新关联的商家?
这不应该是自动完成的吗?
发布于 2010-03-19 03:55:04
好吧,结果是发生了几件事。
在优惠券模型上,我放了一个after_save回调函数来更新相关商家的solr文档:
def update_merchant_solr
merchant.solr_save
end标签问题是由于acts_as_solr和is_taggable上after_save回调的顺序造成的。solr插入的商家after_save发生在is_taggable回调之前,因此,当调用商家solr回调更新其文档时,标签尚未与其关联。切换顺序起作用:
class Merchant < ActiveRecord::Base
is_taggable :tags
acts_as_solr :fields => [:name, :domain, :description], :include => [:coupons, :tags]
...
end发布于 2010-03-19 03:21:00
我使用Sunspot,所以可能会有差异,但我必须在关联的模型上设置回调来重新索引父记录。我猜你也得做同样的事。
https://stackoverflow.com/questions/2472394
复制相似问题