Class: Elasticated::Query
- Inherits:
-
Object
- Object
- Elasticated::Query
- Includes:
- BlockEvaluation, Clonable
- Defined in:
- lib/elasticated/query.rb
Instance Attribute Summary collapse
-
#_aggregations ⇒ Object
Returns the value of attribute _aggregations.
-
#_conditions ⇒ Object
Returns the value of attribute _conditions.
-
#_filter_conditions ⇒ Object
Returns the value of attribute _filter_conditions.
-
#_from ⇒ Object
Returns the value of attribute _from.
-
#_post_conditions ⇒ Object
Returns the value of attribute _post_conditions.
-
#_size ⇒ Object
Returns the value of attribute _size.
-
#_sort ⇒ Object
Returns the value of attribute _sort.
-
#_source ⇒ Object
Returns the value of attribute _source.
Class Method Summary collapse
Instance Method Summary collapse
- #aggregated? ⇒ Boolean
- #aggregations(&block) ⇒ Object
- #build_for_aggregated_search ⇒ Object (also: #build)
- #build_for_aggregations ⇒ Object
-
#build_for_count ⇒ Object
to_hash methods.
- #build_for_search ⇒ Object
- #build_for_top_hits ⇒ Object
-
#conditions(&block) ⇒ Object
builders & attrs.
-
#fill_delimiter(field_delimiter) ⇒ Object
delimiters.
- #filter(&block) ⇒ Object
- #from(value) ⇒ Object (also: #offset)
-
#initialize ⇒ Query
constructor
A new instance of Query.
-
#limited? ⇒ Boolean
misc getters.
-
#parse_aggregations(response) ⇒ Object
parse methods.
- #post(&block) ⇒ Object (also: #post_filter)
- #size(value) ⇒ Object (also: #limit)
- #sort(field, method = nil) ⇒ Object
- #sorted? ⇒ Boolean
- #source(*fields_array) ⇒ Object (also: #fields)
Methods included from Clonable
Methods included from BlockEvaluation
Constructor Details
#initialize ⇒ Query
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
#_aggregations ⇒ Object
Returns the value of attribute _aggregations.
17 18 19 |
# File 'lib/elasticated/query.rb', line 17 def _aggregations @_aggregations end |
#_conditions ⇒ Object
Returns the value of attribute _conditions.
15 16 17 |
# File 'lib/elasticated/query.rb', line 15 def _conditions @_conditions end |
#_filter_conditions ⇒ Object
Returns the value of attribute _filter_conditions.
15 16 17 |
# File 'lib/elasticated/query.rb', line 15 def _filter_conditions @_filter_conditions end |
#_from ⇒ Object
Returns the value of attribute _from.
16 17 18 |
# File 'lib/elasticated/query.rb', line 16 def _from @_from end |
#_post_conditions ⇒ Object
Returns the value of attribute _post_conditions.
15 16 17 |
# File 'lib/elasticated/query.rb', line 15 def _post_conditions @_post_conditions end |
#_size ⇒ Object
Returns the value of attribute _size.
16 17 18 |
# File 'lib/elasticated/query.rb', line 16 def _size @_size end |
#_sort ⇒ Object
Returns the value of attribute _sort.
16 17 18 |
# File 'lib/elasticated/query.rb', line 16 def _sort @_sort end |
#_source ⇒ Object
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
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_search ⇒ Object 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_aggregations ⇒ Object
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_count ⇒ Object
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_search ⇒ Object
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_hits ⇒ Object
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
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
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 |