class Springy::API
Constants
- DEFAULT_BOOST
- DEFAULT_PER_PAGE
Attributes
body[R]
collector[R]
context[R]
opts[R]
root[R]
Public Class Methods
new(opts = {})
click to toggle source
# File lib/springy/api.rb, line 21 def initialize(opts = {}) @opts = opts @collector = AndCollector.new(opts[:nodes] || [], query: true) @root = opts[:root] || {} @body = opts[:body] || {} @context = opts[:context] || {} end
Public Instance Methods
aggs(params = {})
click to toggle source
# File lib/springy/api.rb, line 74 def aggs(params = {}) add_body aggs: params end
boost(params = {}, options = {})
click to toggle source
# File lib/springy/api.rb, line 134 def boost(params = {}, options = {}) return add_context(:boost) if Utils.is_empty? params subcontext = context.merge(boost: true) if params.is_a? self.class boost_json = options.merge(filter: params.json) add_nodes Node.new(boost_json, subcontext) else add_nodes Factory.raw_boost_node(params, subcontext) end end
context?(*args)
click to toggle source
# File lib/springy/api.rb, line 29 def context?(*args) (args - context.keys).empty? end
current_page()
click to toggle source
# File lib/springy/api.rb, line 60 def current_page Utils.current_page(offset, limit) end
explain()
click to toggle source
# File lib/springy/api.rb, line 64 def explain add_root explain: true end
field_value(params = {})
click to toggle source
# File lib/springy/api.rb, line 146 def field_value(params = {}) add_params params, :boost, :field_value_function_node end
fields(*list)
click to toggle source
# File lib/springy/api.rb, line 68 def fields(*list) add_root _source: list end
Also aliased as: source
filter(params = {})
click to toggle source
# File lib/springy/api.rb, line 114 def filter(params = {}) add_params params, :filter, :raw_node end
fulltext(params = '')
click to toggle source
# File lib/springy/api.rb, line 103 def fulltext(params = '') unless params.is_a?(String) raise Errors::InvalidParamsError.new('.fulltext only takes a string') end add_nodes Factory.fulltext_nodes_from_string(params, context) end
geo_distance(params = {})
click to toggle source
# File lib/springy/api.rb, line 130 def geo_distance(params = {}) add_params params, nil, :geo_distance_node end
highlight(params = {})
click to toggle source
# File lib/springy/api.rb, line 78 def highlight(params = {}) add_body highlight: params end
limit(size = nil)
click to toggle source
# File lib/springy/api.rb, line 33 def limit(size = nil) return @root[:size] || DEFAULT_PER_PAGE unless size add_root size: size.to_i end
Also aliased as: limit_value
match(params = {})
click to toggle source
# File lib/springy/api.rb, line 88 def match(params = {}) if params.is_a? Hash subcontext = {query: true} subcontext[:nested] = true if params.delete(:nested) add_params params, subcontext, :context_nodes else add_params Hash[_all: params], :query, :context_nodes end end
more_like(params = {})
click to toggle source
# File lib/springy/api.rb, line 98 def more_like(params = {}) params[:ids] = Array(params[:ids]) if params[:ids] add_params params, :query, :more_like_node end
near(params = {})
click to toggle source
# File lib/springy/api.rb, line 158 def near(params = {}) add_params params, :boost, :decay_function_node end
not(params = {})
click to toggle source
# File lib/springy/api.rb, line 122 def not(params = {}) add_params params, :must_not, :context_nodes end
offset(from = nil)
click to toggle source
# File lib/springy/api.rb, line 39 def offset(from = nil) return @root[:from] || 0 unless from add_root from: from.to_i end
page(num = nil, params = {})
click to toggle source
page 1 = from: 0, size: per_page
page 2 = from: per_page
, size: per_page
# File lib/springy/api.rb, line 46 def page(num = nil, params = {}) return current_page if num.nil? per = params[:limit] || params[:per_page] || limit per = per.to_i > 0 ? per.to_i : 1 start = [num.to_i - 1, 0].max add_root from: start * per, size: per end
per(num = nil)
click to toggle source
# File lib/springy/api.rb, line 54 def per(num = nil) return limit if num.nil? add_root size: [num.to_i, 1].max end
Also aliased as: per_page
query(params = {})
click to toggle source
# File lib/springy/api.rb, line 110 def query(params = {}) add_params params, :query, :raw_node end
random(params)
click to toggle source
# File lib/springy/api.rb, line 150 def random(params) if params.is_a? Hash add_params params, :boost, :random_score_function_node else add_params Hash[seed: params], :boost, :random_score_function_node end end
range(params = {})
click to toggle source
# File lib/springy/api.rb, line 126 def range(params = {}) add_params params, nil, :range_node end
request()
click to toggle source
# File lib/springy/api.rb, line 162 def request @request ||= begin root.merge(body: body.merge(query: collector.as_json)) end end
response()
click to toggle source
# File lib/springy/api.rb, line 168 def response @response ||= Springy.search(request) end
results_obj()
click to toggle source
# File lib/springy/api.rb, line 172 def results_obj @results ||= Results.new request, response end
should(params = {})
click to toggle source
# File lib/springy/api.rb, line 118 def should(params = {}) add_params params, :should, :context_nodes end
where(params = {})
click to toggle source
# File lib/springy/api.rb, line 82 def where(params = {}) subcontext = {filter: true} subcontext[:nested] = params.delete(:nested) if params[:nested] add_params params, subcontext, :context_nodes end
Private Instance Methods
add_body(options = {})
click to toggle source
# File lib/springy/api.rb, line 218 def add_body(options = {}) self.class.new(opts.merge( nodes: collector.nodes, root: root, body: body.merge(options), context: context )) end
add_context(*args)
click to toggle source
# File lib/springy/api.rb, line 227 def add_context(*args) self.class.new(opts.merge( nodes: collector.nodes, root: root, body: body, context: context.merge(args_to_context(*args)) )) end
add_nodes(additional)
click to toggle source
# File lib/springy/api.rb, line 200 def add_nodes(additional) self.class.new(opts.merge( nodes: collector.nodes + Array(additional), root: root, body: body, context: {} )) end
add_params(params = {}, new_context, factory_method)
click to toggle source
# File lib/springy/api.rb, line 189 def add_params(params = {}, new_context, factory_method) return add_context(new_context) if is_empty?(params) subcontext = context.merge(args_to_context(new_context)) if params.is_a? self.class add_nodes params.with_context(subcontext) else add_nodes Factory.send(factory_method, params, subcontext) end end
add_root(options = {})
click to toggle source
# File lib/springy/api.rb, line 209 def add_root(options = {}) self.class.new(opts.merge( nodes: collector.nodes, root: root.merge(options), body: body, context: context )) end
args_to_context(*args)
click to toggle source
def count
results_obj.ids.count
end
# File lib/springy/api.rb, line 182 def args_to_context(*args) args.reduce({}) do |ctx, item| next ctx if item.nil? item.is_a?(Hash) ? ctx.merge(item) : ctx.merge({item => true}) end end