轮胎ActiveModel回调很慢

时间:2013-05-20 12:41:15

标签: ruby-on-rails elasticsearch tire

我有一张表格,显示来自elastsearch的轮胎数据。该表以json格式检索数据异步。 因此,如果我尝试更改条目,表仍会显示条目的“旧”状态(保存到索引/表后,操作直接重定向)。我删除或添加条目时也一样。

但有时会发生这种情况。我发现当我在检索数据之前向索引操作添加“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

我认为这与轮胎回调有关。但为什么这么慢?是否有更好的方法可以相应地更新索引。

我在debian squeeze上使用Elasticsearch 0.90和openjdk-6。

谢谢, 帕特里克

1 个答案:

答案 0 :(得分:0)

Elasticsearch不会立即为其索引写入更新,它的刷新间隔默认为1秒,因此如果写入和读取发生在1秒以内,那么这可能是导致问题的原因。您可以降低刷新间隔(我不建议这样做)或只是在控制器中使用

写入Elasticsearch后调用刷新
Tire.index("whatever").refresh