Module: Chewy::Index::Actions::ClassMethods

Defined in:
lib/chewy/index/actions.rb

Instance Method Summary collapse

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: (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!(*args) ⇒ 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: (www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/).



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/chewy/index/actions.rb', line 55

def create! *args
  options = args.extract_options!.reverse_merge!(alias: true)
  name = build_index_name(suffix: args.first)

  if Chewy::Runtime.version >= 1.1
    body = index_params
    body.merge!(aliases: {index_name => {}}) if options[:alias] && name != index_name
    result = client.indices.create(index: name, body: body)
  else
    result = client.indices.create(index: name, body: index_params)
    result &&= client.indices.put_alias(index: name, name: index_name) if options[:alias] && name != index_name
  end

  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


80
81
82
83
84
85
86
87
88
# File 'lib/chewy/index/actions.rb', line 80

def delete suffix = nil
  result = client.indices.delete index: build_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


99
100
101
102
103
# File 'lib/chewy/index/actions.rb', line 99

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.exist? #=> true

Returns:

  • (Boolean)


14
15
16
# File 'lib/chewy/index/actions.rb', line 14

def exists?
  client.indices.exists(index: index_name)
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`


111
112
113
114
115
# File 'lib/chewy/index/actions.rb', line 111

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`


124
125
126
127
128
# File 'lib/chewy/index/actions.rb', line 124

def purge! suffix = nil
  delete if suffix.present? && exists?
  delete suffix
  create! suffix
end

#reset!(suffix = nil) ⇒ Object

Deletes, creates and imports data to the index. Returns import result

UsersIndex.reset!

If index name suffix passed as the first argument - performs zero-downtime index resetting (described here: www.elasticsearch.org/blog/changing-mapping-with-zero-downtime/).

UsersIndex.reset! Time.now.to_i


163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# File 'lib/chewy/index/actions.rb', line 163

def reset! suffix = nil
  if suffix.present? && (indexes = self.indexes).present?
    create! suffix, alias: false
    result = import suffix: suffix
    client.indices.update_aliases body: {actions: [
      *indexes.map do |index|
        {remove: {index: index, alias: index_name}}
      end,
      {add: {index: build_index_name(suffix: suffix), alias: index_name}}
    ]}
    client.indices.delete index: indexes if indexes.present?
    result
  else
    purge! suffix
    import
  end
end