3

系统:

  • 导轨 4
  • 红宝石 2
  • 弹性搜索 1.6.0

我正在使用 Elasticsearch 过滤记录并计算我的 Active Record 模型的统计数据。我希望我的 Elasticsearch 索引能够镜像我的 Postgres 数据库,以便将现有记录导入到我的索引中,新记录在创建时被索引,等等。

我担心我的两个模型包括这样的:

# 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.statistics时,我会nil进入每个领域。如果我然后执行Bar.import force: trueand then Bar.statistics,我会在扩展的统计信息聚合中得到正确的非零值。

其他可能值得注意的事情:当我使用 Pry 在 Rails 控制台中打开 foo.rb 然后退出时,我遇到了一个Cannot define multiple included blocks for a Concern错误(尽管加载应用程序工作正常)。

我是否缺少使我的记录自动导入 ES 的东西?

4

0 回答 0