Class: Elasticated::Query
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#inspect, #text_for_inspect
#evaluate
#==, #clone
Constructor Details
#initialize ⇒ Query
Returns a new instance of Query.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
176
177
178
179
180
181
182
183
184
|
# File 'lib/elasticated/query.rb', line 176
def method_missing(name, *args, &block)
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
#_aggregations ⇒ Object
Returns the value of attribute _aggregations.
18
19
20
|
# File 'lib/elasticated/query.rb', line 18
def _aggregations
@_aggregations
end
|
#_conditions ⇒ Object
Returns the value of attribute _conditions.
16
17
18
|
# File 'lib/elasticated/query.rb', line 16
def _conditions
@_conditions
end
|
#_filter_conditions ⇒ Object
Returns the value of attribute _filter_conditions.
16
17
18
|
# File 'lib/elasticated/query.rb', line 16
def _filter_conditions
@_filter_conditions
end
|
#_from ⇒ Object
Returns the value of attribute _from.
17
18
19
|
# File 'lib/elasticated/query.rb', line 17
def _from
@_from
end
|
#_post_conditions ⇒ Object
Returns the value of attribute _post_conditions.
16
17
18
|
# File 'lib/elasticated/query.rb', line 16
def _post_conditions
@_post_conditions
end
|
#_size ⇒ Object
Returns the value of attribute _size.
17
18
19
|
# File 'lib/elasticated/query.rb', line 17
def _size
@_size
end
|
#_sort ⇒ Object
Returns the value of attribute _sort.
17
18
19
|
# File 'lib/elasticated/query.rb', line 17
def _sort
@_sort
end
|
#_source ⇒ Object
Returns the value of attribute _source.
17
18
19
|
# File 'lib/elasticated/query.rb', line 17
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
115
116
117
|
# File 'lib/elasticated/query.rb', line 115
def aggregated?
!_aggregations.empty?
end
|
#aggregations(&block) ⇒ Object
Also known as:
aggs
91
92
93
94
|
# File 'lib/elasticated/query.rb', line 91
def aggregations(&block)
_aggregations.evaluate block
self
end
|
#build_for_aggregated_search ⇒ Object
Also known as:
build, to_h
151
152
153
154
155
|
# File 'lib/elasticated/query.rb', line 151
def build_for_aggregated_search
ret = build_for_search
ret.merge! aggs: _aggregations.build unless _aggregations.empty?
ret
end
|
#build_for_aggregations ⇒ Object
128
129
130
131
132
133
134
|
# File 'lib/elasticated/query.rb', line 128
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_count ⇒ Object
121
122
123
124
125
126
|
# File 'lib/elasticated/query.rb', line 121
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_search ⇒ Object
145
146
147
148
149
|
# File 'lib/elasticated/query.rb', line 145
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_hits ⇒ Object
136
137
138
139
140
141
142
143
|
# File 'lib/elasticated/query.rb', line 136
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 unless _source.nil? ret
end
|
#conditions(&block) ⇒ Object
29
30
31
32
|
# File 'lib/elasticated/query.rb', line 29
def conditions(&block)
_conditions.evaluate block
self
end
|
#custom_sort(custom_hash) ⇒ Object
57
58
59
60
61
|
# File 'lib/elasticated/query.rb', line 57
def custom_sort(custom_hash)
self._sort ||= Array.new
_sort << custom_hash
self
end
|
#fill_delimiter(field_delimiter) ⇒ Object
167
168
169
170
|
# File 'lib/elasticated/query.rb', line 167
def fill_delimiter(field_delimiter)
_conditions.fill_delimiter field_delimiter
_filter_conditions.fill_delimiter field_delimiter
end
|
#filter(&block) ⇒ Object
34
35
36
37
|
# File 'lib/elasticated/query.rb', line 34
def filter(&block)
_filter_conditions.evaluate block
self
end
|
#from(value) ⇒ Object
Also known as:
offset
51
52
53
54
|
# File 'lib/elasticated/query.rb', line 51
def from(value)
self._from = value
self
end
|
#heavy_for?(repository) ⇒ Boolean
103
104
105
|
# File 'lib/elasticated/query.rb', line 103
def heavy_for?(repository)
!_size || _size > repository.search_page_size
end
|
#limited? ⇒ Boolean
99
100
101
|
# File 'lib/elasticated/query.rb', line 99
def limited?
!!_size
end
|
#no_source ⇒ Object
86
87
88
89
|
# File 'lib/elasticated/query.rb', line 86
def no_source
self._source = false
self
end
|
#offset? ⇒ Boolean
107
108
109
|
# File 'lib/elasticated/query.rb', line 107
def offset?
_from && _from > 0
end
|
#parse_aggregations(response) ⇒ Object
161
162
163
|
# File 'lib/elasticated/query.rb', line 161
def parse_aggregations(response)
_aggregations.parse response
end
|
#post(&block) ⇒ Object
Also known as:
post_filter
39
40
41
42
|
# File 'lib/elasticated/query.rb', line 39
def post(&block)
_post_conditions.evaluate block
self
end
|
#size(value) ⇒ Object
Also known as:
limit
45
46
47
48
|
# File 'lib/elasticated/query.rb', line 45
def size(value)
self._size = value
self
end
|
#sort(field, method = nil) ⇒ Object
Also known as:
sort_by_field
63
64
65
|
# File 'lib/elasticated/query.rb', line 63
def sort(field, method=nil)
custom_sort(field => { order: method || :asc })
end
|
#sort_by_script(script_hash) ⇒ Object
68
69
70
|
# File 'lib/elasticated/query.rb', line 68
def sort_by_script(script_hash)
custom_sort(_script: script_hash)
end
|
#sort_randomly ⇒ Object
72
73
74
|
# File 'lib/elasticated/query.rb', line 72
def sort_randomly
sort_by_script(script: "Math.random()", type: "number")
end
|
#sorted? ⇒ Boolean
111
112
113
|
# File 'lib/elasticated/query.rb', line 111
def sorted?
!!_sort
end
|
#source(*fields_array) ⇒ Object
Also known as:
fields
76
77
78
79
80
81
82
83
|
# File 'lib/elasticated/query.rb', line 76
def source(*fields_array)
if fields_array.count == 1 && fields_array.first == false
no_source
else
self._source = fields_array.flatten
end
self
end
|