class Elasticfusion::Search::Query::Visitors::Elasticsearch

Constants

OPERATORS

Public Class Methods

new(keyword_field, mapping) click to toggle source
# File lib/elasticfusion/search/query/visitors/elasticsearch.rb, line 10
def initialize(keyword_field, mapping)
  @keyword_field = keyword_field
  @sanitizer = ValueSanitizer.new(mapping)
end

Public Instance Methods

visit_FieldTerm(node) click to toggle source
# File lib/elasticfusion/search/query/visitors/elasticsearch.rb, line 35
def visit_FieldTerm(node)
  value = @sanitizer.value(node.value, field: node.field)

  if node.qualifier
    { range: { node.field.to_sym => { node.qualifier => value } } }
  else
    { term: { node.field.to_sym => value } }
  end
end
visit_NegatedClause(node) click to toggle source
# File lib/elasticfusion/search/query/visitors/elasticsearch.rb, line 25
def visit_NegatedClause(node)
  clause = if node.body.respond_to?(:op) && node.body.op == :and
    node.body.children.map { |n| visit(n) }
  else
    [visit(node.body)]
  end

  { bool: { must_not: clause } }
end
visit_PolyadicExpression(node) click to toggle source
# File lib/elasticfusion/search/query/visitors/elasticsearch.rb, line 18
def visit_PolyadicExpression(node)
  operator = OPERATORS[node.op]
  operands = node.children.map { |n| visit(n) }

  { bool: { operator => operands } }
end
visit_Term(node) click to toggle source
# File lib/elasticfusion/search/query/visitors/elasticsearch.rb, line 45
def visit_Term(node)
  { term: { @keyword_field => node.body } }
end