1

我是 Ruby on Rails 中弹性搜索和轮胎的新手。观看了 ryan bates 的 railscasts 并帮助我开始工作。轮胎是一个伟大的宝石,具有增量索引的功能。假设我有如下映射,如果编辑/删除关联值,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 的值发生变化时,轮胎会自动对定义映射的模型中的相应行进行增量索引?我应该如何处理对关联模型值变化的模型进行增量索引?

提前致谢

4

1 回答 1

0

轮胎与例如不同。想想 Sphinx,因为实际上没有发生增量索引:当你的模型发生变化时,你已经包含了索引回调,整个序列化为 JSON 的记录被发送到 elasticsearch,替换旧文档(请记住,elasticsearch 实际上是一个“可搜索的文档数据库”)。

如果要从子模型触发父模型中的回调,则必须使用 Rails 来执行此操作:

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

请参阅ActiveRecord#touch方法的文档。但是,您还必须在父模型中添加订阅者,如本StackOverflow中所述答案中所述:Elasticsearch、Tire 和 Nested queries/associations with ActiveRecord

当然,您也可以手动处理,通过观察者触发更新,使用后台处理/消息传递等。

于 2012-07-25T11:01:49.823 回答