У меня есть таблица, которая показывает данные из elasticsearch через шину. Таблица извлекает данные async в формате json. Итак, если я попытаюсь изменить запись, таблица по-прежнему показывает «старое» состояние записи (действие перенаправляется непосредственно после сохранения в индекс/таблицу). То же самое, когда я удаляю или добавляю запись.Tire ActiveModel callback slow
Но это случается только иногда. Я узнал, что когда я добавляю «sleep (0.3)» к действию индекса до того, как данные будут восстановлены, он будет работать.
Моя модель:
# encoding: utf-8
class Group
include Mongoid::Document
include Mongoid::Timestamps
include Tire::Model::Search
include Tire::Model::Callbacks
# Relations
has_and_belongs_to_many :users, index: true
has_many :group_rights, dependent: :destroy
accepts_nested_attributes_for :group_rights, allow_destroy: true, autosave: true
###
# Validates
validates :name, presence: true
validates :description, presence: true
###
# Mongoid Fields
field :name, type: String
field :description, type: String
###
# Elasticsearch
index_name "#{Tire::Model::Search.index_prefix}groups" # Indexname /initializers/tire.rb
mapping do
indexes :_id, :index => :not_analyzed
indexes :name
indexes :description
end
def to_indexed_json
to_json
end
###
# Methods
###
end
Я думаю, что это что-то делать с шинной обратного вызова. Но почему это так медленно? Может быть, лучший способ обновить индекс соответственно.
Я использую Elasticsearch 0.90 с openjdk-6 на debian squeeze.
Спасибо, Патрика
Спасибо! Я этого не знал. Я добавил обновление вручную к контроллеру. – patrickkeller
Будьте осторожны, «обновление» не без затрат. Лучше всего оставить его в Elasticsearch - если вам действительно не нужны изменения для распространения сразу, например, в тесте интеграции. – karmi
Если вы используете [searchkick] (https://github.com/ankane/searchkick), вы можете использовать 'Model.searchkick_index.refresh' – zevstatiev