Дельта-индексирование индекса эластичного поиска при изменении значения записи ассоциации модели с использованием Tire и Elastic Search

Я новичок в эластичных Поисках и Шинах в Ruby on Rails. Наблюдал за рейкастами от Райана Бейтса и помог мне начать. Шина является прекрасным украшением и обладает функциональностью для дельта-индексации. Предполагая, что у меня есть сопоставление, подобное следующему, Tire автоматически выполнит дельта-индекс ассоциаций модели, если значение ассоциации будет отредактировано / удалено. Например, предположим, у меня есть отображение индекса, как показано ниже,

 mapping do
    indexes :id,      :type => 'integer', :index    => :not_analyzed
    indexes :col_2,   :type => 'integer', :index    => :not_analyzed
    indexes :col_3,   :type => 'date'
    indexes :col_4,   :type => 'date'

    indexes :model_2 do
      indexes :name,                  :type => 'string', :analyzer => 'whitespace'
      indexes :association_col_2,     :type => 'string', :index    => :not_analyzed
    end
 end

Когда значение model_2.association_col_2 изменится, автоматически утомится дельта-индексом соответствующей строки в модели, для которой определено отображение? Как мне подходить к дельта-индексации модели по изменениям значений модели ассоциации?

заранее спасибо

1 ответ

Решение

Шина отличается от, например. Думая о Сфинксе, потому что на самом деле никакой дельта-индексации не происходит: когда ваша модель изменяется, и вы включили обратные вызовы индексации, вся запись, сериализованная в JSON, отправляется по проводам в asticsearch, заменяя старый документ (имейте в виду, что "эластичный поиск" на самом деле " база данных документов с возможностью поиска ").

Если вы хотите вызвать обратный вызов в родительской модели из дочерней модели, вы должны использовать Rails для этого:

class Brake < ActiveRecord::Base
  belongs_to :car, :touch => true
end

См. Документацию по методу ActiveRecord # touch. Тем не менее, вам также необходимо добавить подписчика в родительской модели, как описано в этом ответе Stackru: Elasticsearch, Tire и Nested запросы / ассоциации с ActiveRecord.

Конечно, вы также можете позаботиться об этом вручную, вызывая обновления через наблюдателей, используя фоновую обработку / обмен сообщениями и т. Д.

Другие вопросы по тегам