如何重新索引Sunspot Solr中的某些对象

时间:2012-06-29 13:36:52

标签: ruby-on-rails solr sunspot

我们使用Sunspot Solr在Ruby on Rails应用程序中进行索引和搜索。

我们想重新索引某些对象,并且有人不小心从Rails控制台运行了Product.reindex命令。结果是所有产品的索引从头开始,我们的目录在索引进行时显得空白。

由于我们拥有大量数据,因此到目前为止已经进行了三天的重建索引。今天早上,当我检查重建索引的进度时,似乎有一个损坏的数据输入导致重新索引停止而没有完成。

我无法重新启动整个Product.reindex操作,因为它需要太长时间。有没有办法只对所选产品进行重建索引?我想选择一系列未编制索引的产品,然后在这个上运行索引。如何在不必运行整个数据集的完整重建索引的情况下将单个产品添加到索引中?

2 个答案:

答案 0 :(得分:12)

Sunspot会对保存回调中的对象进行索引,因此您可以保存每个对象,但也可能会触发其他回调。更精确的方法是

Sunspot.index [post1, post2]
Sunspot.commit

或使用自动提交

Sunspot.index! [post1, post2]

你甚至可以传递对象关系,因为它们只是一个数组

Sunspot.index! post1.comments

答案 1 :(得分:7)

我在https://github.com/sunspot/sunspot#reindexing-objects

找到了答案

每当保存一个对象时,它会自动重新编制索引,作为保存回调的一部分。因此,所需要的只是将需要重新索引的所有对象添加到数组中,然后遍历数组,在每个对象上调用save。这成功更新了索引中的所需对象。