Class: Elasticated::Query

Inherits:
Object
  • Object
show all
Includes:
BlockEvaluation, Clonable
Defined in:
lib/elasticated/query.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Clonable

#==, #clone

Methods included from BlockEvaluation

#evaluate

Constructor Details

#initializeQuery

Returns a new instance of Query.



19
20
21
22
23
24
# File 'lib/elasticated/query.rb', line 19

def initialize
  self._conditions = QueryConditions.new
  self._filter_conditions = QueryConditions.new
  self._post_conditions = QueryConditions.new
  self._aggregations = QueryAggregations.new
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(name, *args, &block) ⇒ Object (private)



143
144
145
146
147
148
149
150
151
# File 'lib/elasticated/query.rb', line 143

def method_missing(name, *args, &block)
  # delegates any "filter_*" method missing to the _filter_conditions object
  # delegates any other method missing to the _conditions object
  conditions_obj = name.to_s.start_with?('filter_') ? _filter_conditions : _conditions
  real_method_name = name.to_s.gsub(/^filter\_/, '').to_sym
  super unless conditions_obj.respond_to? real_method_name
  conditions_obj.send real_method_name, *args, &block
  self
end

Instance Attribute Details

#_aggregationsObject

Returns the value of attribute _aggregations.



17
18
19
# File 'lib/elasticated/query.rb', line 17

def _aggregations
  @_aggregations
end

#_conditionsObject

Returns the value of attribute _conditions.



15
16
17
# File 'lib/elasticated/query.rb', line 15

def _conditions
  @_conditions
end

#_filter_conditionsObject

Returns the value of attribute _filter_conditions.



15
16
17
# File 'lib/elasticated/query.rb', line 15

def _filter_conditions
  @_filter_conditions
end

#_fromObject

Returns the value of attribute _from.



16
17
18
# File 'lib/elasticated/query.rb', line 16

def _from
  @_from
end

#_post_conditionsObject

Returns the value of attribute _post_conditions.



15
16
17
# File 'lib/elasticated/query.rb', line 15

def _post_conditions
  @_post_conditions
end

#_sizeObject

Returns the value of attribute _size.



16
17
18
# File 'lib/elasticated/query.rb', line 16

def _size
  @_size
end

#_sortObject

Returns the value of attribute _sort.



16
17
18
# File 'lib/elasticated/query.rb', line 16

def _sort
  @_sort
end

#_sourceObject

Returns the value of attribute _source.



16
17
18
# File 'lib/elasticated/query.rb', line 16

def _source
  @_source
end

Class Method Details

.build(&block) ⇒ Object



5
6
7
8
9
# File 'lib/elasticated/query.rb', line 5

def build(&block)
  q = new
  q.evaluate block
  q
end

Instance Method Details

#aggregated?Boolean

Returns:

  • (Boolean)


83
84
85
# File 'lib/elasticated/query.rb', line 83

def aggregated?
  !_aggregations.empty?
end

#aggregations(&block) ⇒ Object



68
69
70
71
# File 'lib/elasticated/query.rb', line 68

def aggregations(&block)
  _aggregations.evaluate block
  self
end

#build_for_aggregated_searchObject Also known as: build



119
120
121
122
123
# File 'lib/elasticated/query.rb', line 119

def build_for_aggregated_search
  ret = build_for_search
  ret.merge! aggs: _aggregations.build unless _aggregations.empty?
  ret
end

#build_for_aggregationsObject



96
97
98
99
100
101
102
# File 'lib/elasticated/query.rb', line 96

def build_for_aggregations
  raise "No aggregations present in query" unless aggregated?
  ret = build_for_count
  ret.merge! size: 0
  ret.merge! aggs: _aggregations.build
  ret
end

#build_for_countObject

to_hash methods



89
90
91
92
93
94
# File 'lib/elasticated/query.rb', line 89

def build_for_count
  return { query: _conditions.build } if _filter_conditions.empty?
  filtered = { filter: _filter_conditions.build }
  filtered.merge!(query: _conditions.build) unless _conditions.empty?
  { query: { filtered: filtered } }
end

#build_for_searchObject



113
114
115
116
117
# File 'lib/elasticated/query.rb', line 113

def build_for_search
  ret = build_for_count.merge build_for_top_hits
  ret.merge! post_filter: _post_conditions.build unless _post_conditions.empty?
  ret
end

#build_for_top_hitsObject



104
105
106
107
108
109
110
111
# File 'lib/elasticated/query.rb', line 104

def build_for_top_hits
  ret = Hash.new
  ret.merge! sort: _sort if _sort
  ret.merge! size: _size if _size
  ret.merge! from: _from if _from
  ret.merge! _source: _source if _source
  ret
end

#conditions(&block) ⇒ Object

builders & attrs



28
29
30
31
# File 'lib/elasticated/query.rb', line 28

def conditions(&block)
  _conditions.evaluate block
  self
end

#fill_delimiter(field_delimiter) ⇒ Object

delimiters



134
135
136
137
# File 'lib/elasticated/query.rb', line 134

def fill_delimiter(field_delimiter)
  _conditions.fill_delimiter field_delimiter
  _filter_conditions.fill_delimiter field_delimiter
end

#filter(&block) ⇒ Object



33
34
35
36
# File 'lib/elasticated/query.rb', line 33

def filter(&block)
  _filter_conditions.evaluate block
  self
end

#from(value) ⇒ Object Also known as: offset



50
51
52
53
# File 'lib/elasticated/query.rb', line 50

def from(value)
  self._from = value
  self
end

#limited?Boolean

misc getters

Returns:

  • (Boolean)


75
76
77
# File 'lib/elasticated/query.rb', line 75

def limited?
  !!_size
end

#parse_aggregations(response) ⇒ Object

parse methods



128
129
130
# File 'lib/elasticated/query.rb', line 128

def parse_aggregations(response)
  _aggregations.parse response
end

#post(&block) ⇒ Object Also known as: post_filter



38
39
40
41
# File 'lib/elasticated/query.rb', line 38

def post(&block)
  _post_conditions.evaluate block
  self
end

#size(value) ⇒ Object Also known as: limit



44
45
46
47
# File 'lib/elasticated/query.rb', line 44

def size(value)
  self._size = value
  self
end

#sort(field, method = nil) ⇒ Object



56
57
58
59
60
# File 'lib/elasticated/query.rb', line 56

def sort(field, method=nil)
  self._sort ||= Array.new
  _sort << { field => { order: method || :asc } }
  self
end

#sorted?Boolean

Returns:

  • (Boolean)


79
80
81
# File 'lib/elasticated/query.rb', line 79

def sorted?
  !!_sort
end

#source(*fields_array) ⇒ Object Also known as: fields



62
63
64
65
# File 'lib/elasticated/query.rb', line 62

def source(*fields_array)
  self._source = fields_array.flatten
  self
end