search_facets_histogram.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. // Histogram Facet
  6. // See: http://www.elasticsearch.org/guide/reference/api/search/facets/histogram-facet.html
  7. type HistogramFacet struct {
  8. facetFilter Filter
  9. global *bool
  10. nested string
  11. mode string
  12. keyField string
  13. valueField string
  14. interval int64
  15. timeInterval string
  16. comparatorType string
  17. }
  18. func NewHistogramFacet() HistogramFacet {
  19. return HistogramFacet{
  20. interval: -1,
  21. }
  22. }
  23. func (f HistogramFacet) FacetFilter(filter Facet) HistogramFacet {
  24. f.facetFilter = filter
  25. return f
  26. }
  27. func (f HistogramFacet) Global(global bool) HistogramFacet {
  28. f.global = &global
  29. return f
  30. }
  31. func (f HistogramFacet) Nested(nested string) HistogramFacet {
  32. f.nested = nested
  33. return f
  34. }
  35. func (f HistogramFacet) Mode(mode string) HistogramFacet {
  36. f.mode = mode
  37. return f
  38. }
  39. func (f HistogramFacet) Field(field string) HistogramFacet {
  40. f.keyField = field
  41. return f
  42. }
  43. func (f HistogramFacet) KeyField(keyField string) HistogramFacet {
  44. f.keyField = keyField
  45. return f
  46. }
  47. func (f HistogramFacet) ValueField(valueField string) HistogramFacet {
  48. f.valueField = valueField
  49. return f
  50. }
  51. func (f HistogramFacet) Interval(interval int64) HistogramFacet {
  52. f.interval = interval
  53. return f
  54. }
  55. func (f HistogramFacet) TimeInterval(timeInterval string) HistogramFacet {
  56. f.timeInterval = timeInterval
  57. return f
  58. }
  59. func (f HistogramFacet) addFilterFacetAndGlobal(source map[string]interface{}) {
  60. if f.facetFilter != nil {
  61. source["facet_filter"] = f.facetFilter.Source()
  62. }
  63. if f.nested != "" {
  64. source["nested"] = f.nested
  65. }
  66. if f.global != nil {
  67. source["global"] = *f.global
  68. }
  69. if f.mode != "" {
  70. source["mode"] = f.mode
  71. }
  72. }
  73. func (f HistogramFacet) Source() interface{} {
  74. source := make(map[string]interface{})
  75. f.addFilterFacetAndGlobal(source)
  76. opts := make(map[string]interface{})
  77. source["histogram"] = opts
  78. if f.valueField != "" {
  79. opts["key_field"] = f.keyField
  80. opts["value_field"] = f.valueField
  81. } else {
  82. opts["field"] = f.keyField
  83. }
  84. if f.timeInterval != "" {
  85. opts["time_interval"] = f.timeInterval
  86. } else {
  87. opts["interval"] = f.interval
  88. }
  89. if f.comparatorType != "" {
  90. opts["comparator"] = f.comparatorType
  91. }
  92. return source
  93. }