Module: Chewy::Index::Actions::ClassMethods
- Defined in:
- lib/chewy/index/actions.rb
Instance Method Summary collapse
-
#create(*args, **kwargs) ⇒ Object
Creates index and applies mappings and settings.
-
#create!(suffix = nil, **options) ⇒ Object
Creates index and applies mappings and settings.
-
#delete(suffix = nil) ⇒ Object
Deletes ES index.
-
#delete!(suffix = nil) ⇒ Object
Deletes ES index.
-
#exists? ⇒ Boolean
Checks index existance.
-
#journal ⇒ Chewy::Journal
A Journal instance for the particular index.
-
#purge(suffix = nil) ⇒ Object
Deletes and recreates index.
-
#purge!(suffix = nil) ⇒ Object
Deletes and recreates index.
-
#reset!(suffix = nil, apply_journal: true, journal: false, **import_options) ⇒ true, false
Deletes, creates and imports data to the index.
Instance Method Details
#create(*args, **kwargs) ⇒ Object
Creates index and applies mappings and settings. Returns false in case of unsuccessful creation.
UsersIndex.create # creates index named users
Index name suffix might be passed optionally. In this case, method creates index with suffix and makes unsuffixed alias for it.
UsersIndex.create '01-2013' # creates index users_01-2013 and alias users for it
UsersIndex.create '01-2013', alias: false # creates index users_01-2013 only and no alias
Suffixed index names might be used for zero-downtime mapping change, for example. Description: (http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/).
33 34 35 36 37 |
# File 'lib/chewy/index/actions.rb', line 33 def create(*args, **kwargs) create!(*args, **kwargs) rescue Elasticsearch::Transport::Transport::Errors::BadRequest false end |
#create!(suffix = nil, **options) ⇒ Object
Creates index and applies mappings and settings. Raises elasticsearch-ruby transport error in case of unsuccessfull creation.
UsersIndex.create! # creates index named users
Index name suffix might be passed optionally. In this case, method creates index with suffix and makes unsuffixed alias for it.
UsersIndex.create! '01-2014' # creates index users_01-2014 and alias users for it
UsersIndex.create! '01-2014', alias: false # creates index users_01-2014 only and no alias
Suffixed index names might be used for zero-downtime mapping change, for example. Description: (http://www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/).
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/chewy/index/actions.rb', line 55 def create!(suffix = nil, **) .reverse_merge!(alias: true) general_name = index_name suffixed_name = index_name(suffix: suffix) body = specification_hash body[:aliases] = {general_name => {}} if [:alias] && suffixed_name != general_name args = {index: suffixed_name, body: body} args[:include_type_name] = true if Runtime.version >= '6.7.0' result = client.indices.create(**args) Chewy.wait_for_status if result result end |
#delete(suffix = nil) ⇒ Object
Deletes ES index. Returns false in case of error.
UsersIndex.delete # deletes users index
Supports index suffix passed as the first argument
UsersIndex.delete '01-2014' # deletes users_01-2014 index
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/chewy/index/actions.rb', line 78 def delete(suffix = nil) # Verify that the index_name is really the index_name and not an alias. # # "The index parameter in the delete index API no longer accepts alias names. # Instead, it accepts only index names (or wildcards which will expand to matching indices)." # https://www.elastic.co/guide/en/elasticsearch/reference/6.8/breaking-changes-6.0.html#_delete_index_api_resolves_indices_expressions_only_against_indices index_names = client.indices.get_alias(index: index_name(suffix: suffix)).keys result = client.indices.delete index: index_names.join(',') Chewy.wait_for_status if result result # es-ruby >= 1.0.10 handles Elasticsearch::Transport::Transport::Errors::NotFound # by itself, rescue is for previous versions rescue Elasticsearch::Transport::Transport::Errors::NotFound false end |
#delete!(suffix = nil) ⇒ Object
Deletes ES index. Raises elasticsearch-ruby transport error in case of error.
UsersIndex.delete # deletes users index
Supports index suffix passed as the first argument
UsersIndex.delete '01-2014' # deletes users_01-2014 index
103 104 105 106 107 |
# File 'lib/chewy/index/actions.rb', line 103 def delete!(suffix = nil) # es-ruby >= 1.0.10 handles Elasticsearch::Transport::Transport::Errors::NotFound # by itself, so it is raised here delete(suffix) or raise Elasticsearch::Transport::Transport::Errors::NotFound end |
#exists? ⇒ Boolean
Checks index existance. Returns true or false
UsersIndex.exists? #=> true
14 15 16 |
# File 'lib/chewy/index/actions.rb', line 14 def exists? client.indices.exists(index: index_name) end |
#journal ⇒ Chewy::Journal
A Journal instance for the particular index
218 219 220 |
# File 'lib/chewy/index/actions.rb', line 218 def journal @journal ||= Chewy::Journal.new(self) end |
#purge(suffix = nil) ⇒ Object
Deletes and recreates index. Supports suffixes. Returns result of index creation.
UsersIndex.purge # deletes and creates users index
UsersIndex.purge '01-2014' # deletes users and users_01-2014 indexes, creates users_01-2014
115 116 117 118 119 |
# File 'lib/chewy/index/actions.rb', line 115 def purge(suffix = nil) delete if suffix.present? delete suffix create suffix end |
#purge!(suffix = nil) ⇒ Object
Deletes and recreates index. Supports suffixes. Returns result of index creation. Raises error in case of unsuccessfull creation
UsersIndex.purge! # deletes and creates users index
UsersIndex.purge! '01-2014' # deletes users and users_01-2014 indexes, creates users_01-2014
128 129 130 131 132 |
# File 'lib/chewy/index/actions.rb', line 128 def purge!(suffix = nil) delete if suffix.present? && exists? delete suffix create! suffix end |
#reset!(suffix = nil, apply_journal: true, journal: false, **import_options) ⇒ true, false
Deletes, creates and imports data to the index. Returns the import result. If index name suffix is passed as the first argument - performs zero-downtime index resetting.
It also applies journal if anything was journaled during the reset.
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 |
# File 'lib/chewy/index/actions.rb', line 182 def reset!(suffix = nil, apply_journal: true, journal: false, **) result = if suffix.present? start_time = Time.now indexes = self.indexes - [index_name] create! suffix, alias: false general_name = index_name suffixed_name = index_name(suffix: suffix) optimize_index_settings suffixed_name result = import .merge(suffix: suffix, journal: journal, refresh: !Chewy.reset_disable_refresh_interval) original_index_settings suffixed_name delete if indexes.blank? client.indices.update_aliases body: {actions: [ *indexes.map do |index| {remove: {index: index, alias: general_name}} end, {add: {index: suffixed_name, alias: general_name}} ]} client.indices.delete index: indexes if indexes.present? self.journal.apply(start_time, **) if apply_journal result else purge! import .merge(journal: journal) end specification.lock! result end |