module ChewyQuery::Builder::Compose

Protected Instance Methods

_filtered_query(query, filter, options = {}) click to toggle source
# File lib/chewy_query/builder/compose.rb, line 7
def _filtered_query(query, filter, options = {})
  query = { match_all: {} } if !query.present? && filter.present?

  if filter.present?
    filtered = if query.present?
      { query: { filtered: { query: query, filter: filter } } }
    else
      { query: { filtered: { filter: filter } } }
    end
    filtered[:query][:filtered].merge!(strategy: options[:strategy].to_s) if options[:strategy].present?
    filtered
  elsif query.present?
    { query: query }
  else
    { }
  end
end
_filters_join(filters, logic) click to toggle source
# File lib/chewy_query/builder/compose.rb, line 46
def _filters_join(filters, logic)
  filters = filters.compact

  if filters.many? || (filters.any? && logic == :must_not)
    case logic
    when :and, :or
      { logic => filters }
    when :must, :should, :must_not
      { bool: { logic => filters } }
    else
      { bool: { should: filters, minimum_should_match: logic } }
    end
  else
    filters.first
  end
end
_queries_join(queries, logic) click to toggle source
# File lib/chewy_query/builder/compose.rb, line 25
def _queries_join(queries, logic)
  queries = queries.compact

  if queries.many? || (queries.any? && logic == :must_not)
    case logic
    when :dis_max
      { dis_max: { queries: queries } }
    when :must, :should, :must_not
      { bool: { logic => queries } }
    else
      if logic.is_a?(Float)
        { dis_max: { queries: queries, tie_breaker: logic } }
      else
        { bool: { should: queries, minimum_should_match: logic } }
      end
    end
  else
    queries.first
  end
end