Class: Elasticsearch::Extensions::Documents::AliasedIndexStore
- Inherits:
-
Object
- Object
- Elasticsearch::Extensions::Documents::AliasedIndexStore
- Defined in:
- lib/elasticsearch/extensions/documents/aliased_index_store.rb
Instance Attribute Summary collapse
-
#client ⇒ Object
readonly
Returns the value of attribute client.
-
#read_alias ⇒ Object
readonly
Returns the value of attribute read_alias.
-
#storage ⇒ Object
readonly
Returns the value of attribute storage.
-
#write_alias ⇒ Object
readonly
Returns the value of attribute write_alias.
Instance Method Summary collapse
- #bulk_index(documents) ⇒ Object
- #delete(payload) ⇒ Object
- #index(payload) ⇒ Object
- #indices_for_alias(alias_name) ⇒ Object
-
#initialize(options = {}) ⇒ AliasedIndexStore
constructor
A new instance of AliasedIndexStore.
- #refresh ⇒ Object
- #reindex(options = {}, &block) ⇒ Object
- #reset_aliases ⇒ Object
- #search(payload) ⇒ Object
- #setup ⇒ Object
- #swap_index_alias(options) ⇒ Object
Constructor Details
#initialize(options = {}) ⇒ AliasedIndexStore
Returns a new instance of AliasedIndexStore.
8 9 10 11 12 13 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 8 def initialize( = {}) @client = .fetch(:client) { Documents.client } @storage = .fetch(:storage) { Storage.new } @write_alias = Documents.index_name + "_write" @read_alias = Documents.index_name + "_read" end |
Instance Attribute Details
#client ⇒ Object (readonly)
Returns the value of attribute client.
6 7 8 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 6 def client @client end |
#read_alias ⇒ Object (readonly)
Returns the value of attribute read_alias.
6 7 8 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 6 def read_alias @read_alias end |
#storage ⇒ Object (readonly)
Returns the value of attribute storage.
6 7 8 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 6 def storage @storage end |
#write_alias ⇒ Object (readonly)
Returns the value of attribute write_alias.
6 7 8 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 6 def write_alias @write_alias end |
Instance Method Details
#bulk_index(documents) ⇒ Object
87 88 89 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 87 def bulk_index(documents) client.bulk body: bulk_index_operations(documents) end |
#delete(payload) ⇒ Object
19 20 21 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 19 def delete(payload) client.delete payload.merge(index: write_alias) end |
#index(payload) ⇒ Object
15 16 17 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 15 def index(payload) client.index payload.merge(index: write_alias) end |
#indices_for_alias(alias_name) ⇒ Object
45 46 47 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 45 def indices_for_alias(alias_name) client.indices.get_alias(name: alias_name).keys end |
#refresh ⇒ Object
27 28 29 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 27 def refresh client.indices.refresh index: read_alias end |
#reindex(options = {}, &block) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 31 def reindex( = {}, &block) = Time.now.strftime('%Y%m%d-%H%M%S') new_index_name = Documents.index_name + "_#{}" current_index_name = indices_for_alias(write_alias).first storage.create_index new_index_name swap_index_alias(alias: write_alias, old: current_index_name, new: new_index_name) block.call(self) if block_given? swap_index_alias(alias: read_alias, old: current_index_name, new: new_index_name) storage.drop_index current_index_name end |
#reset_aliases ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 73 def reset_aliases if client.indices.exists_alias(name: write_alias) indices_for_alias(write_alias).each do |index| client.indices.delete_alias index: index, name: write_alias end end if client.indices.exists_alias(name: read_alias) indices_for_alias(read_alias).each do |index| client.indices.delete_alias index: index, name: read_alias end end end |
#search(payload) ⇒ Object
23 24 25 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 23 def search(payload) client.search payload.merge(index: read_alias) end |
#setup ⇒ Object
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 49 def setup reset_aliases = Time.now.strftime('%Y%m%d-%H%M%S') new_index_name = Documents.index_name + "_#{}" storage.create_index new_index_name client.indices.put_alias index: new_index_name, name: read_alias client.indices.put_alias index: new_index_name, name: write_alias end |
#swap_index_alias(options) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/elasticsearch/extensions/documents/aliased_index_store.rb', line 60 def swap_index_alias() change_alias = .fetch(:alias) new_index = .fetch(:new) old_index = .fetch(:old) client.indices.update_aliases body: { actions: [ { remove: { index: old_index, alias: change_alias } }, { add: { index: new_index, alias: change_alias } }, ] } end |