Module: Chewy::Index::Actions::ClassMethods
- Defined in:
- lib/chewy/index/actions.rb
Instance Method Summary collapse
- #clear_cache(args = {index: index_name}) ⇒ Object
-
#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.
- #reindex(source: index_name, dest: index_name) ⇒ Object
-
#reset!(suffix = nil, apply_journal: true, journal: false, **import_options) ⇒ true, false
(also: #reset)
Deletes, creates and imports data to the index.
-
#sync(parallel: nil) ⇒ Hash{Symbol, Object}?
Performs missing and outdated objects synchronization for the current index.
-
#update_mapping(name = index_name, body = root.mappings_hash) ⇒ Object
Adds new fields to an existing data stream or index.
Instance Method Details
#clear_cache(args = {index: index_name}) ⇒ Object
194 195 196 |
# File 'lib/chewy/index/actions.rb', line 194 def clear_cache(args = {index: index_name}) client.indices.clear_cache(args) end |
#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 |
# 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 85 86 87 88 89 90 |
# File 'lib/chewy/index/actions.rb', line 76 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
101 102 103 104 105 |
# File 'lib/chewy/index/actions.rb', line 101 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
190 191 192 |
# File 'lib/chewy/index/actions.rb', line 190 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
113 114 115 116 117 |
# File 'lib/chewy/index/actions.rb', line 113 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
126 127 128 129 130 |
# File 'lib/chewy/index/actions.rb', line 126 def purge!(suffix = nil) delete if suffix.present? && exists? delete suffix create! suffix end |
#reindex(source: index_name, dest: index_name) ⇒ Object
198 199 200 201 202 203 204 205 206 207 208 |
# File 'lib/chewy/index/actions.rb', line 198 def reindex(source: index_name, dest: index_name) client.reindex( { body: { source: {index: source}, dest: {index: dest} } } ) end |
#reset!(suffix = nil, apply_journal: true, journal: false, **import_options) ⇒ true, false Also known as: reset
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.
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/chewy/index/actions.rb', line 149 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 |
#sync(parallel: nil) ⇒ Hash{Symbol, Object}?
Performs missing and outdated objects synchronization for the current index.
232 233 234 235 236 |
# File 'lib/chewy/index/actions.rb', line 232 def sync(parallel: nil) syncer = Syncer.new(self, parallel: parallel) count = syncer.perform {count: count, missing: syncer.missing_ids, outdated: syncer.outdated_ids} if count end |
#update_mapping(name = index_name, body = root.mappings_hash) ⇒ Object
Adds new fields to an existing data stream or index. Change the search settings of existing fields.
216 217 218 219 220 221 |
# File 'lib/chewy/index/actions.rb', line 216 def update_mapping(name = index_name, body = root.mappings_hash) client.indices.put_mapping( index: name, body: body )['acknowledged'] end |