class ElasticArSync::Elastic::Services::IndexHandler
Public Class Methods
new(klass)
click to toggle source
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 2 def initialize(klass) @klass = klass end
Public Instance Methods
create_index(new_index_name)
click to toggle source
インデックスを作成 デフォルトは クラス名の小文字_環境名
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 7 def create_index(new_index_name) @klass.__elasticsearch__.client.indices.create index: new_index_name, body: { settings: @klass.settings.to_hash, mappings: @klass.mapping.to_hash } end
delete_index(target_index)
click to toggle source
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 11 def delete_index(target_index) raise 'can not delete because this index is using now' if target_index == target_alias @klass.__elasticsearch__.client.indices.delete index: target_index rescue false end
import_all_record(target_index ,batch_size = 100)
click to toggle source
DBの内容をESのインデックスに同期する レコード量が多いと時間がかかるのでこれだけは非同期実行
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 19 def import_all_record(target_index ,batch_size = 100) @klass.__elasticsearch__.import(index: target_index, batch_size: batch_size) end
switch_alias(alias_name:, new_index_name:)
click to toggle source
ダウンタイムなしでインデックスを切り替える techlife.cookpad.com/entry/2015/09/25/170000
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 25 def switch_alias(alias_name:, new_index_name:) raise 'this is already assigned' if new_index_name == target_alias actions = [{ add: { index: new_index_name, alias: alias_name } }] old_indexes = @klass.get_aliases.keys old_indexes.each { |old_index| actions << { remove: { index: old_index, alias: alias_name } } } @klass.__elasticsearch__.client.indices.update_aliases(body: { actions: actions }) end
Private Instance Methods
target_alias()
click to toggle source
# File lib/elastic_ar_sync/elastic/services/index_handler.rb, line 37 def target_alias @klass.get_aliases.keys.select { |index| @klass.get_aliases[index]["aliases"].present? }.first end