module Elastics::QueryHelper

Public Instance Methods

normalize_filters(filters) click to toggle source

Combines multiple filters into `and` filter. Returns unmodified input unless it was an array.

# File lib/elastics/query_helper.rb, line 5
def normalize_filters(filters)
  return filters unless filters.is_a?(Array)
  return filters[0] if 2 > filters.size
  {and: {filters: filters}}
end
normalize_query(query, filters) click to toggle source

Wraps given query into `filtered` query if filter is present. Also replaces empty query with `match_all`.

# File lib/elastics/query_helper.rb, line 13
def normalize_query(query, filters)
  filter = normalize_filters filters
  query ||= {match_all: {}}
  return query unless filter
  {filtered: {
    query:  query,
    filter: filter,
  }}
end
terms_array_query(field, val, options = {}) click to toggle source

Returns `nil` if falsy value or empty array is given. Other way it returns term(s) query for it.

# File lib/elastics/query_helper.rb, line 35
def terms_array_query(field, val, options = {})
  terms_query(field, val, options) if val && (!val.is_a?(Array) || val.any?)
end
terms_query(field, val, options = {}) click to toggle source

Returns `term`(for scalar value) or `terms` (for array) query node for specified field.

# File lib/elastics/query_helper.rb, line 25
def terms_query(field, val, options = {})
  if val.is_a?(Array)
    {terms: {field => val}.merge!(options)}
  else
    {term: {field => val}}
  end
end