Commit baa6afb5f5ab7b63bd5e0c98338ef71ccb057a96

Authored by Stan Lo
Committed by Andrew Kane
1 parent 907b5249

Date histogram (#709)

README.md
... ... @@ -643,6 +643,13 @@ Minimum document count
643 643 Product.search "apples", aggs: {store_id: {min_doc_count: 2}}
644 644 ```
645 645  
  646 +Date histogram [master]
  647 +
  648 +```ruby
  649 +Product.search("Product", aggs: { products_per_year: { date_histogram: { field: :created_at, interval: :year }}})
  650 +```
  651 +
  652 +
646 653 #### Moving From Facets
647 654  
648 655 1. Replace `facets` with `aggs` in searches. **Note:** Stats facets are not supported at this time.
... ...
lib/searchkick/query.rb
... ... @@ -564,6 +564,14 @@ module Searchkick
564 564 ranges: agg_options[:date_ranges]
565 565 }.merge(shared_agg_options)
566 566 }
  567 + elsif histogram = agg_options[:date_histogram]
  568 + interval = histogram[:interval]
  569 + payload[:aggs][field] = {
  570 + date_histogram: {
  571 + field: histogram[:field],
  572 + interval: interval
  573 + }
  574 + }
567 575 else
568 576 payload[:aggs][field] = {
569 577 terms: {
... ...
test/aggs_test.rb
... ... @@ -96,6 +96,29 @@ class AggsTest < Minitest::Test
96 96 assert_equal ({2 => 2}), store_agg(where: {color: "blue"}, aggs: {store_id: {where: {in_stock: false}}}, smart_aggs: false)
97 97 end
98 98  
  99 + def test_aggs_group_by_date
  100 + store [{name: "Old Product", created_at: 3.years.ago}]
  101 + aggs = Product.search(
  102 + "Product",
  103 + {
  104 + aggs: {
  105 + products_per_year: {
  106 + date_histogram: {
  107 + field: :created_at,
  108 + interval: :year
  109 + }
  110 + }
  111 + }
  112 + }
  113 + ).aggs
  114 +
  115 + if elasticsearch_below20?
  116 + assert_equal 2, aggs["products_per_year"]["buckets"].size
  117 + else
  118 + assert_equal 4, aggs["products_per_year"]["buckets"].size
  119 + end
  120 + end
  121 +
99 122 protected
100 123  
101 124 def buckets_as_hash(agg)
... ...