我正在使用elasticsearch-rails宝石包。
gem 'elasticsearch-model', '~> 0.1.6'
gem 'elasticsearch-rails', '~> 0.1.6'
我的模型:
place.rb
class Place < ActiveRecord::Base
include PlaceElasticSearch
...
has_many :order_rooms
...
end
orer_room.rb
class OrderRoom < ActiveRecord::Base
belongs_to :place
end
place_elastic_search.rb
require 'elasticsearch/model'
module PlaceElasticSearch
extend ActiveSupport::Concern
included do
include Elasticsearch::Model
include Elasticsearch::Model::Callbacks
index_name "places-#{Rails.env}"
settings INDEX_SETTINGS do
mappings dynamic: 'false' do
...
indexes :order_rooms, type: 'nested', include_in_root: true do
indexes :max_persons, type: 'integer'
end
end
end
after_touch() { __elasticsearch__.index_document }
end
end
我需要在创建/删除/更新订单房间后重新索引elasticsearch文档。
我为order_room模型添加了after_save回调函数。
order_room.rb
after_save :update_place_document
def update_place_document
place.__elasticsearch__.index_document if Place.respond_to?('__elasticsearch__')
end
如果我更新或删除了旧订单房间,它就不能工作。
有什么想法?我错在哪里了?
place(cache: false)
对我们很有效,这真是太棒了。但我们不知道它为什么有效。你有关于传递该参数的文档吗? - Nathan Colgate