0

非同期バックグラウンド プロセスとしてモデルの再インデックスを実行するために、sunspot を遅延ジョブと組み合わせて使用​​しています。モデルの更新の場合、次の理由により、これは正常に機能しますhandle_asynchronously :solr_index, :queue => 'solr_index'

ただし、モデル内の検索可能なブロック (モデル A と呼びましょう) は、関連付けられたモデル (B) の属性も参照します。B には多くの As があります。関連付けられたモデルがユーザーによって更新されると、B の after_save コールバック内で次のように再インデックスをトリガーしますSunspot.index(self.my_many_As)。インデックスの再作成は成功しますが、遅延ジョブとして実行されません。どうすればそれを達成できますか?

助言がありますか?

4

2 に答える 2

1

更新されたドキュメントのインデックスを呼び出すジョブをスケジュールするのはどうですか? 特定のモデルのインデックスが最後に更新された時刻をログに記録し、Sunspot.index(ModelB.updated_after(last_update_time)) を呼び出すことができます。

于 2012-08-15T15:22:53.877 に答える
0

呼び出す代わりに、Sunspot.index(self.my_many_As)B の after_save コールバック内で直接各 A に対して solr_index を呼び出しますself.my_many_As.each(&:solr_index)。私のために働きます。

于 2012-08-17T16:29:35.467 に答える