系统:
- 导轨 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: true
and then Bar.statistics
,我会在扩展的统计信息聚合中得到正确的非零值。
其他可能值得注意的事情:当我使用 Pry 在 Rails 控制台中打开 foo.rb 然后退出时,我遇到了一个Cannot define multiple included blocks for a Concern
错误(尽管加载应用程序工作正常)。
我是否缺少使我的记录自动导入 ES 的东西?