Дельта-индексирование индекса эластичного поиска при изменении значения записи ассоциации модели с использованием 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.
Конечно, вы также можете позаботиться об этом вручную, вызывая обновления через наблюдателей, используя фоновую обработку / обмен сообщениями и т. Д.