module Elastics::SearchQuery
Helpers to build search query.
class Query include Elastics::SearchQuery # implement any of: # query, phrase_query, query_filters, post_filter, aggregations def phrase_query {bool: {should: [ {multi_match: { # ... }} ]}} # or just {math: {message: params[:query_string]}} end def query_filters [ {term: {published: true}}, terms_array_query(:tag, params[:tags], execution: :and), some_complex_filter, ] end def aggregations { tag: {terms: { field: :tag, size: 10, shard_size: 10, }}, } end end result = Model.search_elastics Query.new(params).as_json
Attributes
params[R]
Public Class Methods
new(params)
click to toggle source
# File lib/elastics/search_query.rb, line 45 def initialize(params) @params = params end
Public Instance Methods
aggregations()
click to toggle source
# File lib/elastics/search_query.rb, line 81 def aggregations end
as_json()
click to toggle source
# File lib/elastics/search_query.rb, line 49 def as_json page = params[:page] || 1 per_page = params[:per_page] || 10 result = { from: (page - 1) * per_page, size: per_page, fields: [], query: query, sort: sort, } post_filter = self.post_filter result[:post_filter] = post_filter if post_filter aggregations = self.aggregations result[:aggregations] = aggregations if aggregations result end
phrase_query()
click to toggle source
# File lib/elastics/search_query.rb, line 71 def phrase_query end
post_filter()
click to toggle source
# File lib/elastics/search_query.rb, line 78 def post_filter end
query()
click to toggle source
Builds query from phrase_query
& query_filters.
# File lib/elastics/search_query.rb, line 67 def query normalize_query(phrase_query, query_filters.compact) end
query_filters()
click to toggle source
# File lib/elastics/search_query.rb, line 74 def query_filters [] end
sort()
click to toggle source
Takes `params` and returns it compatible with elastics. Wraps scalars into array, hashes are converted into arrays, array are passed as is.
{name: :asc, _score: :desc} => [{name: :asc}, {_score: :desc}] :created_at => [:created_at]
# File lib/elastics/search_query.rb, line 90 def sort val = params[:sort] case val when Hash then val.map { |x| Hash[[x]] } when Array then val else val ? [val] : [] end end