11

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

我们想重新索引一些对象,但有人不小心从 Rails 控制台运行了 Product.reindex 命令。结果是所有产品的索引都是从头开始的,而我们的目录在索引时显示为空。

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

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

4

2 回答 2

15

Sunspot 确实在保存回调中索引了一个对象,因此您可以保存每个对象,但也许这也会触发其他回调。一种更精确的方法是

Sunspot.index [post1, post2]
Sunspot.commit

或使用自动提交

Sunspot.index! [post1, post2]

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

Sunspot.index! post1.comments
于 2013-04-11T11:12:09.403 回答
7

我在https://github.com/sunspot/sunspot#reindexing-objects上找到了答案

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

于 2012-07-02T05:34:43.230 回答