Class: PhraseParser::Query

Inherits:
Object show all
Defined in:
lib/doing/phrase_parser.rb

Overview

Query object

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(clauses) ⇒ Query

Returns a new instance of Query.



79
80
81
82
83
84
# File 'lib/doing/phrase_parser.rb', line 79

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

Instance Attribute Details

#must_clausesObject

Returns the value of attribute must_clauses.



77
78
79
# File 'lib/doing/phrase_parser.rb', line 77

def must_clauses
  @must_clauses
end

#must_not_clausesObject

Returns the value of attribute must_not_clauses.



77
78
79
# File 'lib/doing/phrase_parser.rb', line 77

def must_not_clauses
  @must_not_clauses
end

#should_clausesObject

Returns the value of attribute should_clauses.



77
78
79
# File 'lib/doing/phrase_parser.rb', line 77

def should_clauses
  @should_clauses
end

Instance Method Details

#clause_to_query(clause) ⇒ Object



93
94
95
96
97
98
99
100
101
102
# File 'lib/doing/phrase_parser.rb', line 93

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) ⇒ Object



104
105
106
# File 'lib/doing/phrase_parser.rb', line 104

def match(term)
  term
end

#match_phrase(phrase) ⇒ Object



108
109
110
# File 'lib/doing/phrase_parser.rb', line 108

def match_phrase(phrase)
  phrase
end

#to_elasticsearchObject



86
87
88
89
90
91
# File 'lib/doing/phrase_parser.rb', line 86

def to_elasticsearch
  QueryParser::CLAUSE_TYPES.each_with_object({}) do |type, query|
    clauses = instance_variable_get("@#{type}_clauses")
    query[type] = clauses.map { |clause| clause_to_query(clause) } if clauses&.any?
  end
end