タイヤを介してelasticsearchからのデータを示すテーブルがあります。テーブルは、json 形式でデータを非同期に取得します。そのため、エントリを変更しようとすると、テーブルにはまだエントリの「古い」状態が表示されます (アクションは、インデックス/テーブルに保存した直後にリダイレクトされます)。エントリを削除または追加する場合も同じです。
しかし、これは時々起こります。データが取得される前に「スリープ(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
これはタイヤのコールバックと関係があると思います。しかし、なぜこれが遅いのでしょうか?それに応じてインデックスを更新するより良い方法はありますか?
私は、debian スクイーズで openjdk-6 で Elasticsearch 0.90 を使用しています。
ありがとう、パトリック