elasticsearch:import タスクで eager loading を行う
elasticsearch-rails には、DB のデータを Elasticsearch にインポートするelasticsearch:import
という便利な rake タスクがあります。
ただ、has_many
などで関連しているデータもインデックスしたい場合に
rake environment elasticsearch:import:all FORCE=y
だけだと、eager loading が行われず、インデックス速度が遅くなってしまいます。
そこで、モデルに
scope :search_import, -> { includes(:categories, :sub_categories) }
のような scope を作ってあげて、
rake environment elasticsearch:import:all SCOPE="search_import" FORCE=y
とすると、eager loading が行われ、インデックス速度を上げることができます。
また、Gemfile に
gem 'ansi'
を追加すると、タスクの実行中にプログレスバーが表示されて便利です。