search_aggs_terms_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // Copyright 2012-2015 Oliver Eilhard. All rights reserved.
  2. // Use of this source code is governed by a MIT-license.
  3. // See http://olivere.mit-license.org/license.txt for details.
  4. package elastic
  5. import (
  6. "encoding/json"
  7. "testing"
  8. )
  9. func TestTermsAggregation(t *testing.T) {
  10. agg := NewTermsAggregation().Field("gender").Size(10).OrderByTermDesc()
  11. data, err := json.Marshal(agg.Source())
  12. if err != nil {
  13. t.Fatalf("marshaling to JSON failed: %v", err)
  14. }
  15. got := string(data)
  16. expected := `{"terms":{"field":"gender","order":{"_term":"desc"},"size":10}}`
  17. if got != expected {
  18. t.Errorf("expected\n%s\n,got:\n%s", expected, got)
  19. }
  20. }
  21. func TestTermsAggregationWithSubAggregation(t *testing.T) {
  22. subAgg := NewAvgAggregation().Field("height")
  23. agg := NewTermsAggregation().Field("gender").Size(10).
  24. OrderByAggregation("avg_height", false)
  25. agg = agg.SubAggregation("avg_height", subAgg)
  26. data, err := json.Marshal(agg.Source())
  27. if err != nil {
  28. t.Fatalf("marshaling to JSON failed: %v", err)
  29. }
  30. got := string(data)
  31. expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}}},"terms":{"field":"gender","order":{"avg_height":"desc"},"size":10}}`
  32. if got != expected {
  33. t.Errorf("expected\n%s\n,got:\n%s", expected, got)
  34. }
  35. }
  36. func TestTermsAggregationWithMultipleSubAggregation(t *testing.T) {
  37. subAgg1 := NewAvgAggregation().Field("height")
  38. subAgg2 := NewAvgAggregation().Field("width")
  39. agg := NewTermsAggregation().Field("gender").Size(10).
  40. OrderByAggregation("avg_height", false)
  41. agg = agg.SubAggregation("avg_height", subAgg1)
  42. agg = agg.SubAggregation("avg_width", subAgg2)
  43. data, err := json.Marshal(agg.Source())
  44. if err != nil {
  45. t.Fatalf("marshaling to JSON failed: %v", err)
  46. }
  47. got := string(data)
  48. expected := `{"aggregations":{"avg_height":{"avg":{"field":"height"}},"avg_width":{"avg":{"field":"width"}}},"terms":{"field":"gender","order":{"avg_height":"desc"},"size":10}}`
  49. if got != expected {
  50. t.Errorf("expected\n%s\n,got:\n%s", expected, got)
  51. }
  52. }