在ActiveRecord模型的弹性搜索索引之间共享设置(Tire gem)

时间:2012-11-29 19:12:34

标签: ruby-on-rails elasticsearch tire

我有tire正确使用格式为

的单个ActiveRecord模型
setting do
  ...SETTINGS...
  mapping do
    ...INDEXES...
  end
end

如果可能,我想在多个模型之间共享这些设置。我无法从初始化程序中找到任何方法。

我该怎么做?

1 个答案:

答案 0 :(得分:4)

鉴于Ruby的灵活性,您可以在此处获得许多选项。最明显的一点:

  1. 使用模块常量/方法或多个模块将所需的设置/映射存储为哈希,然后将它们传递给轮胎方法。

  2. 在模块中定义共享设置/映射/行为,然后可以将其包含在模型中。该方法在tire/issues/481

  3. 中有详细描述

    相关摘要:

    module Searchable
    
      def self.included(base)
    
        p "Included in #{base}"
    
        base.class_eval do
          include Tire::Model::Search
    
          tire do
            mapping do
              indexes :title,   type: 'string', analyzer: 'snowball'
            end
          end
        end
      end
    end
    
    class Article < ActiveRecord::Base
      include Searchable
    end
    
    class Person < ActiveRecord::Base
      include Searchable
    end
    

    这实际上不必在初始化程序中 - 您可以将它放在可从Rails应用程序加载的任何位置。