Class: OpenSearch::DSL::Search::Search

Inherits:
Object
  • Object
show all
Defined in:
lib/opensearch/dsl/search.rb

Overview

Wraps the whole search definition (queries, filters, aggregations, sorting, etc)

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ Search

Returns a new instance of Search.



67
68
69
70
# File 'lib/opensearch/dsl/search.rb', line 67

def initialize(*args, &block)
  @options = Options.new *args
  block.arity < 1 ? self.instance_eval(&block) : block.call(self) if block
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

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

Delegates to the methods provided by the Options class



257
258
259
260
261
262
263
264
# File 'lib/opensearch/dsl/search.rb', line 257

def method_missing(name, *args, &block)
  if @options.respond_to? name
    @options.__send__ name, *args, &block
    self
  else
    super
  end
end

Instance Attribute Details

#aggregationsObject

Returns the value of attribute aggregations.



65
66
67
# File 'lib/opensearch/dsl/search.rb', line 65

def aggregations
  @aggregations
end

Instance Method Details

#aggregation(*args, &block) ⇒ self

DSL method for building the ‘aggregations` part of a search definition

Returns:

  • (self)


145
146
147
148
149
150
151
152
153
154
155
# File 'lib/opensearch/dsl/search.rb', line 145

def aggregation(*args, &block)
  @aggregations ||= AggregationsCollection.new

  if block
    @aggregations.update args.first => Aggregation.new(*args, &block)
  else
    name = args.shift
    @aggregations.update name => args.shift
  end
  self
end

#filter(*args, &block) ⇒ self

DSL method for building the ‘filter` part of a search definition

Returns:

  • (self)


99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/opensearch/dsl/search.rb', line 99

def filter(*args, &block)
  case
    when block
      @filter = Filter.new(*args, &block)
      self
    when !args.empty?
      @filter = args.first
      self
    else
      @filter
  end
end

#filter=(value) ⇒ Object

Set the filter part of a search definition



114
115
116
# File 'lib/opensearch/dsl/search.rb', line 114

def filter=(value)
  filter value
end

#from(value = nil) ⇒ self Also known as: from=

DSL method for building the ‘from` part of a search definition

Returns:

  • (self)


225
226
227
228
229
230
231
232
# File 'lib/opensearch/dsl/search.rb', line 225

def from(value=nil)
  if value
    @from = value
    self
  else
    @from
  end
end

#highlight(*args, &block) ⇒ self

DSL method for building the ‘highlight` part of a search definition

Returns:

  • (self)


167
168
169
170
171
172
173
174
# File 'lib/opensearch/dsl/search.rb', line 167

def highlight(*args, &block)
  if !args.empty? || block
    @highlight = Highlight.new(*args, &block)
    self
  else
    @highlight
  end
end

#post_filter(*args, &block) ⇒ self

DSL method for building the ‘post_filter` part of a search definition

Returns:

  • (self)


122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/opensearch/dsl/search.rb', line 122

def post_filter(*args, &block)
  case
    when block
      @post_filter = Filter.new(*args, &block)
      self
    when !args.empty?
      @post_filter = args.first
      self
    else
      @post_filter
  end
end

#post_filter=(value) ⇒ Object

Set the post_filter part of a search definition



137
138
139
# File 'lib/opensearch/dsl/search.rb', line 137

def post_filter=(value)
  post_filter value
end

#query(*args, &block) ⇒ self, {Query}

DSL method for building or accessing the ‘query` part of a search definition

Returns:



76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/opensearch/dsl/search.rb', line 76

def query(*args, &block)
  case
    when block
      @query = Query.new(*args, &block)
      self
    when !args.empty?
      @query = args.first
      self
    else
      @query
  end
end

#query=(value) ⇒ Object

Set the query part of a search definition



91
92
93
# File 'lib/opensearch/dsl/search.rb', line 91

def query=(value)
  query value
end

#size(value = nil) ⇒ self Also known as: size=

DSL method for building the ‘size` part of a search definition

Returns:

  • (self)


212
213
214
215
216
217
218
219
# File 'lib/opensearch/dsl/search.rb', line 212

def size(value=nil)
  if value
    @size = value
    self
  else
    @size
  end
end

#sort(*args, &block) ⇒ self

DSL method for building the ‘sort` part of a search definition

Returns:

  • (self)


180
181
182
183
184
185
186
187
# File 'lib/opensearch/dsl/search.rb', line 180

def sort(*args, &block)
  if !args.empty? || block
    @sort = Sort.new(*args, &block)
    self
  else
    @sort
  end
end

#sort=(value) ⇒ Object

Set the sort part of a search definition



191
192
193
# File 'lib/opensearch/dsl/search.rb', line 191

def sort=(value)
  @sort = value
end

#stored_fields(value = nil) ⇒ self Also known as: stored_fields=

DSL method for building the ‘stored_fields` part of a search definition

Returns:

  • (self)


199
200
201
202
203
204
205
206
# File 'lib/opensearch/dsl/search.rb', line 199

def stored_fields(value=nil)
  if value
    @stored_fields = value
    self
  else
    @stored_fields
  end
end

#suggest(*args, &block) ⇒ self

DSL method for building the ‘suggest` part of a search definition

Returns:

  • (self)


238
239
240
241
242
243
244
245
246
247
# File 'lib/opensearch/dsl/search.rb', line 238

def suggest(*args, &block)
  if !args.empty? || block
    @suggest ||= {}
    key, options = args
    @suggest.update key => Suggest.new(key, options, &block)
    self
  else
    @suggest
  end
end

#suggest=(value) ⇒ Object

Set the suggest part of a search definition



251
252
253
# File 'lib/opensearch/dsl/search.rb', line 251

def suggest=(value)
  @suggest = value
end

#to_hashHash

Converts the search definition to a Hash

Returns:

  • (Hash)


270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
# File 'lib/opensearch/dsl/search.rb', line 270

def to_hash
  hash = {}
  hash.update(query: @query.to_hash)   if @query
  hash.update(filter: @filter.to_hash) if @filter
  hash.update(post_filter: @post_filter.to_hash) if @post_filter
  hash.update(aggregations: @aggregations.reduce({}) { |sum,item| sum.update item.first => item.last.to_hash }) if @aggregations
  hash.update(sort: @sort.to_hash) if @sort
  hash.update(size: @size) if @size
  hash.update(stored_fields: @stored_fields) if @stored_fields
  hash.update(from: @from) if @from
  hash.update(suggest: @suggest.reduce({}) { |sum,item| sum.update item.last.to_hash }) if @suggest
  hash.update(highlight: @highlight.to_hash) if @highlight
  hash.update(@options) unless @options.empty?
  hash
end