11

RubyonRailsアプリケーションでのインデックス作成と検索にはSunspotSolrを使用します。

一部のオブジェクトのインデックスを再作成したかったのですが、誰かがRailsコンソールから誤ってProduct.reindexコマンドを実行しました。その結果、すべての製品のインデックス作成が最初から開始され、インデックス作成が行われている間、カタログは空のように見えました。

膨大な量のデータがあるため、これまでに3日間でインデックスの再作成が行われました。今朝、インデックスの再作成の進行状況を確認したところ、データエントリが破損しているため、インデックスの再作成が完了せずに停止したようです。

時間がかかりすぎるため、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 に答える