Commit c74c0eba19f0a8be121bf00b738bacde9db6f6a2

Authored by Andrew Kane
1 parent f9086b58

Smart aggs true by default

Showing 2 changed files with 19 additions and 19 deletions   Show diff stats
lib/searchkick/query.rb
... ... @@ -362,9 +362,9 @@ module Searchkick
362 362 }
363 363 }
364 364  
365   - agg_options.deep_merge!(where: options.fetch(:where, {}).reject { |k| k == field } ) if options[:smart_aggs] == true
366   - agg_filters = where_filters(agg_options[:where])
367   -
  365 + where = {}
  366 + where = (options[:where] || {}).reject { |k| k == field } unless options[:smart_aggs] == false
  367 + agg_filters = where_filters(where.merge(agg_options[:where] || {}))
368 368 if agg_filters.any?
369 369 payload[:aggs][field] = {
370 370 filter: {
... ...
test/aggs_test.rb
... ... @@ -33,34 +33,34 @@ class TestAggs < Minitest::Test
33 33 assert_equal(1, agg["sum_other_doc_count"]) if Gem::Version.new(Searchkick.server_version) >= Gem::Version.new("1.4.0")
34 34 end
35 35  
36   - def test_where_no_smart_aggs
37   - assert_equal ({2 => 2}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false}}})
38   - assert_equal ({2 => 2}), store_agg(where: {color: "blue"}, aggs: {store_id: {where: {in_stock: false}}})
  36 + def test_query_where
  37 + assert_equal ({1 => 1}), store_agg(where: {in_stock: true}, aggs: [:store_id])
39 38 end
40 39  
41   - def test_smart_aggs
42   - assert_equal ({1 => 1}), store_agg(where: {in_stock: true}, aggs: [:store_id], smart_aggs: true)
  40 + def test_two_wheres
  41 + assert_equal ({2 => 1}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false}}})
43 42 end
44 43  
45   - def test_smart_aggs_where
46   - assert_equal ({2 => 1}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false}}}, smart_aggs: true)
  44 + def test_where_override
  45 + assert_equal ({}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false, color: "blue"}}})
  46 + assert_equal ({2 => 1}), store_agg(where: {color: "blue"}, aggs: {store_id: {where: {in_stock: false, color: "red"}}})
47 47 end
48 48  
49   - def test_smart_aggs_where_override
50   - assert_equal ({2 => 1}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false, color: "blue"}}}, smart_aggs: true)
51   - assert_equal ({}), store_agg(where: {color: "blue"}, aggs: {store_id: {where: {in_stock: false, color: "red"}}}, smart_aggs: true)
  49 + def test_skip
  50 + assert_equal ({1 => 1, 2 => 2}), store_agg(where: {store_id: 2}, aggs: [:store_id])
52 51 end
53 52  
54   - def test_smart_aggs_skip_agg
55   - assert_equal ({1 => 1, 2 => 2}), store_agg(where: {store_id: 2}, aggs: [:store_id], smart_aggs: true)
  53 + def test_skip_complex
  54 + assert_equal ({1 => 1, 2 => 1}), store_agg(where: {store_id: 2, price: {gt: 5}}, aggs: [:store_id])
56 55 end
57 56  
58   - def test_smart_aggs_skip_agg_complex
59   - assert_equal ({1 => 1, 2 => 1}), store_agg(where: {store_id: 2, price: {gt: 5}}, aggs: [:store_id], smart_aggs: true)
  57 + def test_multiple
  58 + assert_equal ({"store_id" => {1 => 1, 2 => 2}, "color" => {"blue" => 1, "green" => 1, "red" => 1}}), store_multiple_aggs(aggs: [:store_id, :color])
60 59 end
61 60  
62   - def test_multiple_aggs
63   - assert_equal ({"store_id" => {1 => 1, 2 => 2}, "color" => {"blue" => 1, "green" => 1, "red" => 1}}), store_multiple_aggs(aggs: [:store_id, :color])
  61 + def test_smart_aggs_false
  62 + assert_equal ({2 => 2}), store_agg(where: {color: "red"}, aggs: {store_id: {where: {in_stock: false}}}, smart_aggs: false)
  63 + assert_equal ({2 => 2}), store_agg(where: {color: "blue"}, aggs: {store_id: {where: {in_stock: false}}}, smart_aggs: false)
64 64 end
65 65  
66 66 protected
... ...