只用太阳黑子重新索引一个特定的记录

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

以上是关于只用太阳黑子重新索引一个特定的记录的主要内容,如果未能解决你的问题,请参考以下文章

更改特定索引而不在 Vuejs 中重新渲染整个数组

每次需要访问特定索引处的元素时是不是可以重新排序数组?

将数组中的多个不相邻元素重新排序到特定索引的算法

SVN 转储/重新加载具有历史记录的特定版本

太阳内部突然变白,或地球重新出现冰河时期,人类该如何避过?

pandas重新索引