41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'lib/esse/search/query.rb', line 41
def scroll_hits(batch_size: 1_000, scroll: '1m')
response = execute_search_query!(size: batch_size, scroll: scroll)
scroll_id = nil
fetched = 0
total = response.total
loop do
fetched += response.hits.size
yield(response.hits) if response.hits.any?
break if fetched >= total
scroll_id = response.raw_response['scroll_id'] || response.raw_response['_scroll_id']
break unless scroll_id
response = execute_scroll_query(scroll: scroll, scroll_id: scroll_id)
end
ensure
begin
transport.clear_scroll(body: {scroll_id: scroll_id}) if scroll_id
rescue Esse::Transport::NotFoundError
end
end
|