Module: Elasticsearch::Model::Importing::ClassMethods

Defined in:
lib/elasticsearch/model/importing.rb

Instance Method Summary collapse

Instance Method Details

#import(options = {}, &block) {|Hash| ... } ⇒ Fixnum

Import all model records into the index

The method will pick up correct strategy based on the ‘Importing` module defined in the corresponding adapter.

Examples:

Import all records into the index


Article.import

Set the batch size to 100


Article.import batch_size: 100

Process the response from Elasticsearch


Article.import do |response|
  puts "Got " + response['items'].select { |i| i['index']['error'] }.size.to_s + " errors"
end

Delete and create the index with appropriate settings and mappings


Article.import force: true

Refresh the index after importing all batches


Article.import refresh: true

Import the records into a different index/type than the default one


Article.import index: 'my-new-index', type: 'my-other-type'

Parameters:

  • options (Hash) (defaults to: {})

    Options passed to the underlying ‘__find_in_batches`method

  • block (Proc)

    Optional block to evaluate for each batch

Yields:

  • (Hash)

    Gives the Hash with the Elasticsearch response to the block

Returns:

  • (Fixnum)

    Number of errors encountered during importing



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/elasticsearch/model/importing.rb', line 67

def import(options={}, &block)
  errors       = 0
  refresh      = options.delete(:refresh) || false
  target_index = options.delete(:index)   || index_name
  target_type  = options.delete(:type)    || document_type

  if options.delete(:force)
    self.create_index! force: true, index: target_index
  end

  __find_in_batches(options) do |batch|
    response = client.bulk \
                 index:   target_index,
                 type:    target_type,
                 body:    batch

    yield response if block_given?

    errors += response['items'].map { |k, v| k.values.first['error'] }.compact.length
  end

  self.refresh_index! if refresh

  return errors
end