Skip to content

Commit 7ca7b8c

Browse files
gitviolapicandocodigo
authored andcommitted
[Gem] Fixes Bulk Helper update with slice
1 parent 7624a35 commit 7ca7b8c

2 files changed

Lines changed: 31 additions & 5 deletions

File tree

elasticsearch/lib/elasticsearch/helpers/bulk_helper.rb

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,15 @@ def delete(ids, params = {}, body = {})
7676
# @yieldparam ingest_docs [Array<Hash>] The collection of documents sent in the bulk request.
7777
#
7878
def update(docs, params = {}, body = {}, &block)
79-
ingest_docs = docs.map do |doc|
80-
{ update: { _index: @index, _id: doc.delete('id'), data: { doc: doc } } }
81-
end
82-
if (slice = params.delete(:slice))
83-
ingest_docs.each_slice(slice) { |items| update(items, params, &block) }
79+
if (slice = params[:slice])
80+
request_params = params.dup
81+
request_params.delete(:slice)
82+
docs.each_slice(slice) { |items| update(items, request_params, &block) }
8483
else
84+
ingest_docs = docs.map do |doc|
85+
document = doc.dup
86+
{ update: { _index: @index, _id: document.delete('id'), data: { doc: document } } }
87+
end
8588
bulk_request(ingest_docs, params, &block)
8689
end
8790
end

elasticsearch/spec/integration/helpers/bulk_helper_spec.rb

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,29 @@
6565
response = bulk_helper.update(docs)
6666
expect(response.status).to eq(200)
6767
expect(response['items'].map { |i| i['update']['result'] }.uniq.first).to eq('updated')
68+
expect(docs.map { |doc| doc['id'] }).not_to include(nil)
69+
end
70+
71+
it 'Updates documents in slices' do
72+
docs = [
73+
{ scientific_name: 'Otocyon megalotos', name: 'Bat-eared fox' },
74+
{ scientific_name: 'Herpestes javanicus', name: 'Small Indian mongoose' }
75+
]
76+
bulk_helper = Elasticsearch::Helpers::BulkHelper.new(CLIENT, index_slice, params)
77+
bulk_helper.ingest(docs)
78+
animals = CLIENT.search(index: index_slice, size: 200)['hits']['hits']
79+
docs = animals.map { |animal| animal['_source'].merge({ 'id' => animal['_id'] }) }
80+
docs.map { |doc| doc['scientific_name'].upcase! }
81+
82+
bulk_helper.update(docs, { slice: 1 }) do |response, update_docs|
83+
expect(response.status).to eq(200)
84+
expect(update_docs.count).to eq(1)
85+
end
86+
87+
expect(docs.map { |doc| doc['id'] }).not_to include(nil)
88+
response = CLIENT.search(index: index_slice, size: 200)
89+
expect(response['hits']['hits'].map { |animal| animal['_source']['scientific_name'] }.sort)
90+
.to eq(docs.map { |doc| doc['scientific_name'] }.sort)
6891
end
6992

7093
it 'Deletes documents' do

0 commit comments

Comments
 (0)