lib/agnostic_backend/queryable/cloudsearch/executor.rb
require 'aws-sdk'
module AgnosticBackend
module Queryable
module Cloudsearch
class Executor < AgnosticBackend::Queryable::Executor
include AgnosticBackend::Utilities
def execute
with_exponential_backoff Aws::CloudSearch::Errors::Throttling do
response = client.search(params)
ResultSet.new(response, query)
end
end
def to_s
result = ''
result += "search?q=#{query_expression}" if query_expression
result += " filter=#{filter_query}" if filter_query
result += " return=#{return_expression}" if return_expression
result += " sort=#{sort}" if sort
result += " size=#{size}" if size
result += " offset=#{start}" if start
result += " cursor=#{scroll_cursor}" if scroll_cursor
result += " parser=#{query_parser}"
result
end
def params
{
cursor: scroll_cursor,
expr: expr,
facet: facet,
filter_query: filter_query,
highlight: highlight,
partial: partial,
query: query_expression,
query_options: query_options,
query_parser: query_parser,
return: return_expression,
size: size,
sort: sort,
start: start
}
end
private
def filter_visitor
options[:filter_visitor]
end
def client
query.context.index.cloudsearch_domain_client
end
def filter_query
filter_expression.accept(filter_visitor) if filter_expression
end
def query_expression
where_expression ? where_expression.accept(visitor) : 'matchall'
end
def scroll_cursor
scroll_cursor_expression.accept(visitor) if scroll_cursor_expression
end
def start
offset_expression.accept(visitor) if offset_expression
end
def expr
end
def facet
end
def highlight
end
def partial
false
end
def query_options
end
def query_parser
case visitor
when SimpleVisitor
'simple'
else
'structured'
end
end
def return_expression
select_expression.accept(visitor) if select_expression
end
def size
limit_expression.accept(visitor) if limit_expression
end
def sort
order_expression.accept(visitor) if order_expression
end
end
end
end
end