3

システム:

  • レール4
  • ルビー2
  • エラスティックサーチ 1.6.0

Elasticsearch を使用してレコードをフィルタリングし、Active Record モデルの統計を計算しています。Elasticsearch インデックスに Postgres データベースを反映させて、既存のレコードがインデックスにインポートされたり、新しいレコードが作成されるとインデックスが作成されるようにしたいと考えています。

私のモデルの2つが次のように含まれていることに懸念があります。

# app/models/concerns/foo.rb
module Foo
  extend ActiveSupport::Concern

  included do
    include Elasticsearch::Model
    include Elasticsearch::Model::Callbacks

    self.import force: true
  end

  class_methods do
    def statistics(filter = {})
      # ES extended_stats aggregations
    end
  end
end

# app/models/bar.rb
# Same for another class
class Bar < ActiveRecord::Base
  include Foo
end

しかし、Rails コンソールを開いて を呼び出すとBar.statisticsnilすべてのフィールドが表示されます。次に を実行するBar.import force: trueBar.statistics、拡張統計集計で nil 以外の正しい値が得られます。

その他の注意点: Pry を使用して Rails コンソールで foo.rb を開いて終了すると、Cannot define multiple included blocks for a Concernエラーが発生しました (ただし、アプリケーションのロードは正常に機能します)。

自分のレコードを ES に自動インポートするための何かが不足していますか?

4

0 に答える 0