class PhraseParser::Query

Query object

Attributes

must_clauses[RW]
must_not_clauses[RW]
should_clauses[RW]

Public Class Methods

new(clauses) click to toggle source
# File lib/doing/phrase_parser.rb, line 74
def initialize(clauses)
  grouped = clauses.chunk(&:operator).to_h
  self.should_clauses = grouped.fetch(:should, [])
  self.must_not_clauses = grouped.fetch(:must_not, [])
  self.must_clauses = grouped.fetch(:must, [])
end

Public Instance Methods

clause_to_query(clause) click to toggle source
# File lib/doing/phrase_parser.rb, line 105
def clause_to_query(clause)
  case clause
  when TermClause
    match(clause.term)
  when PhraseClause
    match_phrase(clause.phrase)
  else
    raise "Unknown clause type: #{clause}"
  end
end
match(term) click to toggle source
# File lib/doing/phrase_parser.rb, line 116
def match(term)
  term
end
match_phrase(phrase) click to toggle source
# File lib/doing/phrase_parser.rb, line 120
def match_phrase(phrase)
  phrase
end
to_elasticsearch() click to toggle source
# File lib/doing/phrase_parser.rb, line 81
def to_elasticsearch
  query = {}

  if should_clauses.any?
    query[:should] = should_clauses.map do |clause|
      clause_to_query(clause)
    end
  end

  if must_clauses.any?
    query[:must] = must_clauses.map do |clause|
      clause_to_query(clause)
    end
  end

  if must_not_clauses.any?
    query[:must_not] = must_not_clauses.map do |clause|
      clause_to_query(clause)
    end
  end

  query
end