module Elastics::Tasks::Migrations
Public Instance Methods
migrate(options = {})
click to toggle source
# File lib/elastics/tasks/migrations.rb, line 4 def migrate(options = {}) create_indices(options) put_mappings(options) end
migrate!(options = {})
click to toggle source
# File lib/elastics/tasks/migrations.rb, line 9 def migrate!(options = {}) options_next = options.merge version: :next need_reindex = options.fetch(:reindex, true) drop_indices(options_next) create_indices(options_next) put_mappings(options_next) started_at = reindex(options_next) if need_reindex forward_aliases(options) if need_reindex reindex(options.merge(version: :current, updated_after: started_at)) end end
models_to_reindex(options = {})
click to toggle source
# File lib/elastics/tasks/migrations.rb, line 41 def models_to_reindex(options = {}) indices = options[:indices].try!(:map, &:to_s) types = options[:types].try!(:map, &:to_s) models = Model.list.select do |model| next if indices && !indices.include?(model.elastics_index_base) next if types && !types.include?(model.elastics_type_name) true end models.reject { |model| models.find { |other| model < other } } end
reindex(options = {})
click to toggle source
Runs `#reindex_elastics` on matching models. Returns hash with timestamps with reindex start time for each model. Supports this kind of hash as `:updated_after` option, to reindex only updated records.
# File lib/elastics/tasks/migrations.rb, line 26 def reindex(options = {}) version = options.fetch(:version, :current) updated_after = options.fetch(:updated_after, {}) Rails.application.eager_load! if defined?(Rails) VersionManager.use_version version do Hash[models_to_reindex(options).map do |model| started_at = Time.now log "Reindexing #{model.elastics_index_base} into " \ "#{model.elastics_index_name}/#{model.elastics_type_name}" model.reindex_elastics(updated_after: updated_after[model]) [model, started_at] end] end end