Class: ElasticArSync::Elastic::Services::IndexHandler
- Inherits:
-
Object
- Object
- ElasticArSync::Elastic::Services::IndexHandler
- Defined in:
- lib/elastic_ar_sync/elastic/services/index_handler.rb
Instance Method Summary collapse
-
#create_index(new_index_name) ⇒ Object
インデックスを作成 デフォルトは クラス名の小文字_環境名.
- #delete_index(target_index) ⇒ Object
-
#import_all_record(target_index, batch_size = 100) ⇒ Object
DBの内容をESのインデックスに同期する レコード量が多いと時間がかかるのでこれだけは非同期実行.
-
#initialize(klass) ⇒ IndexHandler
constructor
A new instance of IndexHandler.
-
#switch_alias(alias_name:, new_index_name:) ⇒ Object
ダウンタイムなしでインデックスを切り替える techlife.cookpad.com/entry/2015/09/25/170000.
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 |