module SearchEnjoy::Aggregation::ClassMethods

Public Instance Methods

aggregate(*args) click to toggle source
# File lib/search_enjoy/aggregation.rb, line 15
def aggregate(*args)
  values = @search_index.values.map { |object| args.map { |key| object[key] } }
  values_per_keys = values.transpose.map(&:uniq).zip(args)

  aggregations = []

  values_per_keys.each do |key_values|
    key = key_values.last

    hash = { field: key, data: [] }

    key_values.first.each do |value|
      count = search(key => value).size

      data_hash = {
          value: value,
          count: count
      }

      hash[:data] << data_hash
    end

    aggregations << hash
  end

  aggregations
end