class Arelastic::Queries::Bool
Attributes
filter[RW]
must[RW]
must_not[RW]
options[RW]
should[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/arelastic/queries/bool.rb, line 5 def initialize(options) @must = read_option! options, 'must' @filter = read_option! options, 'filter' @should = read_option! options, 'should' @must_not = read_option! options, 'must_not' @options = options end
Public Instance Methods
as_elastic()
click to toggle source
# File lib/arelastic/queries/bool.rb, line 13 def as_elastic searches = {} { 'must' => must, 'filter' => filter, 'should' => should, 'must_not' => must_not }.each do |k, v| if v.is_a?(Array) v = merge_expression(k, v, klass: Queries::HasParent, merge_test_method: :parent_type) v = merge_expression(k, v, klass: Queries::HasChild, merge_test_method: :type) v = merge_expression(k, v, klass: Queries::Nested, merge_test_method: :path_and_options) end searches[k] = convert_to_elastic(v) if v end { 'bool' => searches.update(options) } end
merge_expression(clause, expr, klass:, merge_test_method:)
click to toggle source
# File lib/arelastic/queries/bool.rb, line 34 def merge_expression(clause, expr, klass:, merge_test_method:) mergeable, other = expr.partition { |el| el.is_a?(klass) } merged = mergeable.group_by(&merge_test_method).flat_map do |_, group| if group.size > 1 group.first.instance_variable_set("@query", self.class.new(clause => group.map(&:query))) group.first else group end end merged + other end