Class: Sunspot::Query::FieldStats

Inherits:
Object
  • Object
show all
Defined in:
lib/sunspot/query/field_stats.rb

Constant Summary collapse

STATS_FUNCTIONS =
[:min, :max, :sum, :avg, :sumsq]

Instance Method Summary collapse

Constructor Details

#initialize(field, options) ⇒ FieldStats

Returns a new instance of FieldStats.



4
5
6
7
# File 'lib/sunspot/query/field_stats.rb', line 4

def initialize(field, options)
  @field, @options = field, options
  @facets = []
end

Instance Method Details

#add_facet(field) ⇒ Object



9
10
11
# File 'lib/sunspot/query/field_stats.rb', line 9

def add_facet field
  @facets << field
end

#add_json_facet(json_facet) ⇒ Object



13
14
15
# File 'lib/sunspot/query/field_stats.rb', line 13

def add_json_facet(json_facet)
  @json_facet = json_facet
end

#facet_keyObject



52
53
54
# File 'lib/sunspot/query/field_stats.rb', line 52

def facet_key
  qualified_param 'facet'
end

#json_stats_paramsObject



42
43
44
45
46
47
48
49
50
# File 'lib/sunspot/query/field_stats.rb', line 42

def json_stats_params
  params = {}
  STATS_FUNCTIONS.each { |s| params[s] = "#{s.to_s}(#{@field.indexed_name})" }
  unless @options[:stats].nil?
    to_remove = STATS_FUNCTIONS - @options[:stats]
    to_remove.map { |s| params.delete(s)}
  end
  params
end

#qualified_param(name) ⇒ Object



56
57
58
# File 'lib/sunspot/query/field_stats.rb', line 56

def qualified_param name
  :"f.#{@field.indexed_name}.stats.#{name}"
end

#recursive_add_stats(query) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/sunspot/query/field_stats.rb', line 30

def recursive_add_stats(query)
  query.keys.each do |k|
    if !query[k][:facet].nil?
      query[k][:facet] = recursive_add_stats(query[k][:facet])
    end
    query[k][:facet] ||= {}
    query[k][:sort] = { @options[:sort] => @options[:sort_type]||'desc' } unless @options[:sort].nil?
    query[k][:facet].merge!(json_stats_params)
  end
  query
end

#to_paramsObject



17
18
19
20
21
22
23
24
25
26
# File 'lib/sunspot/query/field_stats.rb', line 17

def to_params
  params = {}
  if !@json_facet.nil?
    params['json.facet'] = recursive_add_stats(@json_facet.get_params).to_json
  else
    params.merge!(:stats => true, :"stats.field" => [@field.indexed_name])
    params[facet_key] = @facets.map(&:indexed_name) unless @facets.empty?
  end
  params
end