Module: Chewy::Index::Actions::ClassMethods
- Defined in:
- lib/chewy/index/actions.rb
Instance Method Summary collapse
-
#create(*args) ⇒ 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) ⇒ 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) create!(*args) 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 |
# 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 result = client.indices.create(index: suffixed_name, body: body) 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
76 77 78 79 80 81 82 83 84 |
# File 'lib/chewy/index/actions.rb', line 76 def delete(suffix = nil) result = client.indices.delete index: index_name(suffix: suffix) 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
95 96 97 98 99 |
# File 'lib/chewy/index/actions.rb', line 95 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
208 209 210 |
# File 'lib/chewy/index/actions.rb', line 208 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
107 108 109 110 111 |
# File 'lib/chewy/index/actions.rb', line 107 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
120 121 122 123 124 |
# File 'lib/chewy/index/actions.rb', line 120 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.
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 |
# File 'lib/chewy/index/actions.rb', line 172 def reset!(suffix = nil, apply_journal: true, journal: false, **) result = if suffix.present? start_time = Time.now indexes = self.indexes 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 |