Module: Elastics::QueryHelper

Included in:
SearchQuery
Defined in:
lib/elastics/query_helper.rb

Instance Method Summary collapse

Instance Method Details

#normalize_filters(filters) ⇒ Object

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



5
6
7
8
9
# 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) ⇒ Object

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



13
14
15
16
17
18
19
20
21
# 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 = {}) ⇒ Object

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



35
36
37
# 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 = {}) ⇒ Object

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



25
26
27
28
29
30
31
# 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