module Elasticsearch::API::Actions

Public Instance Methods

scroll_each(arguments={}, &blk) click to toggle source
# File lib/es_utils/ext/elasticsearch/scroll.rb, line 4
def scroll_each(arguments={}, &blk)
  valid_params = [
    :index, :scroll, :size, :body
  ]

  params = Utils.__validate_and_extract_params arguments, valid_params

  params[:body]   ||= {}
  params[:scroll] ||= "5m"
  params[:size]   ||= 100

  s = search({
    index:       params[:index],
    scroll:      params[:scroll],
    size:        params[:size],
    body:        {sort: '_id'}.merge(params[:body]),
    search_type: "scan",
  })

  loop do
    s = scroll(:scroll_id => s["_scroll_id"], :scroll => params[:scroll])
    results = s["hits"]["hits"]

    break  if results.empty?

    blk.call(results)
  end
end