class Boolminot::Clauses::Compounds::Disjunction

Public Instance Methods

or_with_terms(terms_clause, options = {}) click to toggle source
Calls superclass method
# File lib/boolminot/clauses/compounds/disjunction.rb, line 15
def or_with_terms(terms_clause, options = {})
  default_options = {
    argument_first: true
  }
  options = default_options.merge(options)

  return super(terms_clause) unless terms_clause.opts.empty?

  terms_clauses_with_same_field, others = clauses.partition { |q| q.terms_with_field?(terms_clause.field) }

  return super(terms_clause) if terms_clauses_with_same_field.empty?

  with_same_field = terms_clauses_with_same_field.first # no disjunction would have two terms with the same field
  same_field      = with_same_field.field
  values          = with_same_field.values
  more_values     = terms_clause.values

  all_values = options[:argument_first] ? (more_values + values) : (values + more_values)
  with_more_values = clause_factory.terms(same_field, all_values)

  updated_clauses = options[:argument_first] ? ([with_more_values] + others) : (others + [with_more_values])
  clause_factory.disjunction(updated_clauses)
end
to_elasticsearch_negated(options = {}) click to toggle source
# File lib/boolminot/clauses/compounds/disjunction.rb, line 11
def to_elasticsearch_negated(options = {})
  { bool: { must_not: clauses.map { |c| c.to_elasticsearch(options) } } }
end

Private Instance Methods

to_elasticsearch_in_filter_context() click to toggle source
# File lib/boolminot/clauses/compounds/disjunction.rb, line 50
def to_elasticsearch_in_filter_context
  { bool: { should: clauses.map { |c| c.to_elasticsearch(context: :filter) } } }
end
to_elasticsearch_in_query_context() click to toggle source
# File lib/boolminot/clauses/compounds/disjunction.rb, line 41
def to_elasticsearch_in_query_context
  {
    bool: {
      should: clauses.map { |c| c.to_elasticsearch(context: :query) },
      minimum_should_match: 1
    }
  }
end