sunspot:reindexのeager loading

Sunspotを使っているとき、Solrのインデックスの再構築をするにはrakeタスクのsunspot:reindexを使う。

ここでsearchableにしているモデル群に親子関係があり、インデックスにも親なり子なり孫なりの値を引いてきているならばeager loadingさせることで再構築にかかる時間を短くできる、かもしれない。個々のインデックス処理にもよるので一概には言えないが。

sunspot:reindexおよびその内部で呼び出されているsearchableなモデルのクラスメソッドsolr_indexは、searcableの引数に渡されたハッシュのうち:includeにあたるものをeager loadingのために使う。

class Post < ActiveRecord::Base
  ...
  searchable(include: [:comments]) do
    ...
  end
  ...
end

このようにしておくと、その内部で次のような形でfind_in_batchesを呼び出してレコードの処理を行う。

find_in_batches(include: [:comments], ...) do |records|
  ...
end

(Sunspot 2.0.0で確認。)