只用太阳黑子重新索引一个特定的记录
Posted
技术标签:
【中文标题】只用太阳黑子重新索引一个特定的记录【英文标题】:Reindex just one particular record with sunspot 【发布时间】:2012-05-14 05:53:40 【问题描述】:我有两个模型
class User < ActiveRecord::Base
has_many :posts
searchable do
text :post_titles
end
def post_titles
posts.map &:title
end
end
class Post < ActiveRecord::Base
belongs_to :user
end
问题是,当我更新 Post sunspot 的标题时,不会更新相关用户的索引,并且无法通过新数据搜索。如果我这样做User.index
它可以解决问题但需要太多时间。有没有更好的解决方案来更新子记录更改的父记录索引(例如仅重新索引父记录而不是所有用户)?
【问题讨论】:
【参考方案1】:Sunspot 提供了一个实例index()
方法,用于索引一条记录。
我做的是
class Post
belongs_to :user
after_save :update_user_index
private
def update_user_index
user.index
end
end
如果您在控制台中运行此程序,并想立即查看结果,请致电Sunspot.commit
【讨论】:
为什么我总是在 *** 提问几分钟后找到解决方案:\ Jeff Atwood 已经谈到了this phenomenon。干杯! 你为什么要做一个 Sunspot.commit?我在我的应用程序中运行了此代码,但在控制台中运行 Sunspot.commit 之前我看不到任何更改。为什么只有从控制台时才需要这个? 我不能确定关于 Sunspot.commit 的默认策略是什么,但有两种方法可以检查索引和索引!第二个也触发 Sunspot.commit。 为了方便以后找到此答案的任何人,如果在控制台中工作,您需要调用 Sunspot.commit 的原因是 sunspot 的默认行为是等待当前请求结束提交任何更改。由于没有请求,因此需要手动完成提交。见:github.com/sunspot/sunspot/tree/master/sunspot_rails#committing以上是关于只用太阳黑子重新索引一个特定的记录的主要内容,如果未能解决你的问题,请参考以下文章