Method: Esse::Search::Query#scroll_hits

Defined in:
lib/esse/search/query.rb

#scroll_hits(batch_size: 1_000, scroll: '1m') ⇒ Object



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