Class: ElasticArSync::Elastic::Services::IndexHandler

Inherits:
Object
  • Object
show all
Defined in:
lib/elastic_ar_sync/elastic/services/index_handler.rb

Instance Method Summary collapse

Constructor Details

#initialize(klass) ⇒ IndexHandler

Returns a new instance of IndexHandler.



2
3
4
# File 'lib/elastic_ar_sync/elastic/services/index_handler.rb', line 2

def initialize(klass)
  @klass = klass
end

Instance Method Details

#create_index(new_index_name) ⇒ Object

インデックスを作成 デフォルトは クラス名の小文字_環境名



7
8
9
# 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) ⇒ Object



11
12
13
14
15
# 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) ⇒ Object

DBの内容をESのインデックスに同期する レコード量が多いと時間がかかるのでこれだけは非同期実行



19
20
21
# 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:) ⇒ Object

ダウンタイムなしでインデックスを切り替える techlife.cookpad.com/entry/2015/09/25/170000



25
26
27
28
29
30
31
32
33
# 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