84 lines
2 KiB
Ruby
84 lines
2 KiB
Ruby
module Elasticsearch
|
|
module Model
|
|
|
|
# Contains modules and classes for wrapping the response from Elasticsearch
|
|
#
|
|
module Response
|
|
|
|
# Encapsulate the response returned from the Elasticsearch client
|
|
#
|
|
# Implements Enumerable and forwards its methods to the {#results} object.
|
|
#
|
|
class Response
|
|
attr_reader :klass, :search
|
|
|
|
include Enumerable
|
|
|
|
delegate :each, :empty?, :size, :slice, :[], :to_ary, to: :results
|
|
|
|
def initialize(klass, search, options={})
|
|
@klass = klass
|
|
@search = search
|
|
end
|
|
|
|
# Returns the Elasticsearch response
|
|
#
|
|
# @return [Hash]
|
|
#
|
|
def response
|
|
@response ||= HashWrapper.new(search.execute!)
|
|
end
|
|
|
|
# Returns the collection of "hits" from Elasticsearch
|
|
#
|
|
# @return [Results]
|
|
#
|
|
def results
|
|
@results ||= Results.new(klass, self)
|
|
end
|
|
|
|
# Returns the collection of records from the database
|
|
#
|
|
# @return [Records]
|
|
#
|
|
def records(options = {})
|
|
@records ||= Records.new(klass, self, options)
|
|
end
|
|
|
|
# Returns the "took" time
|
|
#
|
|
def took
|
|
raw_response['took']
|
|
end
|
|
|
|
# Returns whether the response timed out
|
|
#
|
|
def timed_out
|
|
raw_response['timed_out']
|
|
end
|
|
|
|
# Returns the statistics on shards
|
|
#
|
|
def shards
|
|
@shards ||= response['_shards']
|
|
end
|
|
|
|
# Returns a Hashie::Mash of the aggregations
|
|
#
|
|
def aggregations
|
|
@aggregations ||= Aggregations.new(raw_response['aggregations'])
|
|
end
|
|
|
|
# Returns a Hashie::Mash of the suggestions
|
|
#
|
|
def suggestions
|
|
@suggestions ||= Suggestions.new(raw_response['suggest'])
|
|
end
|
|
|
|
def raw_response
|
|
@raw_response ||= @response ? @response.to_hash : search.execute!
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|