ウェブサービスを作っています。

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'

を追加すると、タスクの実行中にプログレスバーが表示されて便利です。