class Elasticfusion::Search::Wrapper

Public Class Methods

new(model, query, &block) click to toggle source
# File lib/elasticfusion/search/wrapper.rb, line 14
def initialize(model, query, &block)
  @search_runner      = model.method(:search)

  @searchable_mapping = model.elasticfusion[:searchable_mapping]
  @searchable_fields  = model.elasticfusion[:searchable_fields]
  @keyword_field      = model.elasticfusion[:keyword_field]

  @builder = Search::Builder.new(model.elasticfusion)
  @builder.instance_eval(&block) if block_given?

  # The subset of queries that is currently supported can be executed
  # in the filter context, which does not compute _score and can be cached.
  # It cannot be used for relevance sorting, though.
  @builder.filter parse_query(query) if query.present?
end

Public Instance Methods

elasticsearch_request() click to toggle source
# File lib/elasticfusion/search/wrapper.rb, line 36
def elasticsearch_request
  { query: { bool: { must: @builder.queries,
                     filter: @builder.filters } },
    sort: @builder.sorts }
end
peeker() click to toggle source
# File lib/elasticfusion/search/wrapper.rb, line 42
def peeker
  Peeker.new(self)
end
perform(request = elasticsearch_request) click to toggle source
# File lib/elasticfusion/search/wrapper.rb, line 32
def perform(request = elasticsearch_request)
  @search_runner.call(request)
end

Private Instance Methods

parse_query(query) click to toggle source
# File lib/elasticfusion/search/wrapper.rb, line 48
def parse_query(query)
  ast = Query::Parser.new(query, @searchable_fields).ast
  visitor = Query::Visitors::Elasticsearch.new(@keyword_field,
                                               @searchable_mapping)
  visitor.accept(ast)
end