2012-11-29 1 views
0

меня tire правильно работает для одной модели ActiveRecord в форматенастройки общего доступа между elasticsearch индексов для ActiveRecord моделей (драгоценный камень Tire)

setting do 
    ...SETTINGS... 
    mapping do 
    ...INDEXES... 
    end 
end 

Если возможно, я хотел бы разделить эти настройки между несколькими моделями. Я не могу найти способ сделать это из инициализатора.

Как это сделать?

+0

Был ли мой ответ вам полезен? – karmi

ответ

4

Учитывая гибкость Ruby, у вас есть много вариантов. Наиболее очевидные из них:

  1. Используйте модуль постоянная/метод, или несколько из них, чтобы сохранить желаемые настройки/отображение в виде беспорядочной, а затем просто передать их методам шин.

  2. Определите общие настройки/сопоставления/поведение в модуле, которые затем можно включить в свои модели. Этот подход хорошо описан в tire/issues/481.

Соответствующий фрагмент кода:

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.

+0

Спасибо большое! Существуют ли какие-либо недостатки (производительность или иное) для определения всех анализаторов вместе, даже если не каждый анализатор является пользователем в каждой модели? – Felix

+0

Забыл уведомить вас! – Felix

+1

Нет, никаких реальных накладных расходов - это просто материал конфигурации для elasticsearch. – karmi