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