class Sunspot::Query::AbstractJsonFieldFacet

Constants

DISTINCT_STRATEGIES

Attributes

field[RW]

Public Class Methods

new(field, options, setup) click to toggle source
# File lib/sunspot/query/abstract_json_field_facet.rb, line 9
def initialize(field, options, setup)
  @field, @options, @setup = field, options, setup
end

Public Instance Methods

get_params() click to toggle source
# File lib/sunspot/query/abstract_json_field_facet.rb, line 35
def get_params
  query = field_name_with_local_params
  nested_params = recursive_nested_params(@options)

  if !nested_params.nil?
    query[@field.name][:facet] ||= {}
    query[@field.name][:facet].merge!(nested_params)
  end
  query
end
init_params() click to toggle source
# File lib/sunspot/query/abstract_json_field_facet.rb, line 13
def init_params
  params = {}
  params[:limit] = @options[:limit] unless @options[:limit].nil?
  params[:mincount] = @options[:minimum_count] unless @options[:minimum_count].nil?
  params[:sort] = { @options[:sort] => @options[:sort_type]||'desc' } unless @options[:sort].nil?
  params[:prefix] = @options[:prefix] unless @options[:prefix].nil?
  params[:offset] = @options[:offset] unless @options[:offset].nil?

  if !@options[:distinct].nil?
    dist_opts = @options[:distinct]
    raise Exception.new("Need to specify a strategy") if dist_opts[:strategy].nil?
    raise Exception.new("The strategy must be one of #{DISTINCT_STRATEGIES}") unless DISTINCT_STRATEGIES.include?(dist_opts[:strategy])
    @stategy = dist_opts[:strategy]
    @group_by = dist_opts[:group_by].nil? ? @field : @setup.field(dist_opts[:group_by])
    params[:field] = @group_by.indexed_name
    params[:facet] = {}
    params[:facet][:distinct] = "#{@stategy}(#{@field.indexed_name})"
  end

  params
end
to_params() click to toggle source
# File lib/sunspot/query/abstract_json_field_facet.rb, line 46
def to_params
  { 'json.facet' => self.get_params.to_json }
end

Private Instance Methods

recursive_nested_params(options) click to toggle source
# File lib/sunspot/query/abstract_json_field_facet.rb, line 52
def recursive_nested_params(options)
  if !options[:nested].nil? && options[:nested].is_a?(Hash)
    opts = options[:nested]
    field_name = opts[:field]

    options = Sunspot::Util.extract_options_from([opts])
    params = Sunspot::Util.parse_json_facet(field_name, options, @setup).field_name_with_local_params
    if !opts.nil?
      nested_params = recursive_nested_params(opts)
      params[field_name][:facet] = nested_params unless nested_params.nil?
    end

    params
  end
end