search_facets_histogram_script.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  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 HistogramScriptFacet struct {
  8. facetFilter Filter
  9. global *bool
  10. nested string
  11. mode string
  12. lang string
  13. keyField string
  14. keyScript string
  15. valueScript string
  16. params map[string]interface{}
  17. interval int64
  18. comparatorType string
  19. }
  20. func NewHistogramScriptFacet() HistogramScriptFacet {
  21. return HistogramScriptFacet{
  22. interval: -1,
  23. params: make(map[string]interface{}),
  24. }
  25. }
  26. func (f HistogramScriptFacet) FacetFilter(filter Facet) HistogramScriptFacet {
  27. f.facetFilter = filter
  28. return f
  29. }
  30. func (f HistogramScriptFacet) Global(global bool) HistogramScriptFacet {
  31. f.global = &global
  32. return f
  33. }
  34. func (f HistogramScriptFacet) Nested(nested string) HistogramScriptFacet {
  35. f.nested = nested
  36. return f
  37. }
  38. func (f HistogramScriptFacet) Mode(mode string) HistogramScriptFacet {
  39. f.mode = mode
  40. return f
  41. }
  42. func (f HistogramScriptFacet) KeyField(keyField string) HistogramScriptFacet {
  43. f.keyField = keyField
  44. return f
  45. }
  46. func (f HistogramScriptFacet) KeyScript(keyScript string) HistogramScriptFacet {
  47. f.keyScript = keyScript
  48. return f
  49. }
  50. func (f HistogramScriptFacet) ValueScript(valueScript string) HistogramScriptFacet {
  51. f.valueScript = valueScript
  52. return f
  53. }
  54. func (f HistogramScriptFacet) Interval(interval int64) HistogramScriptFacet {
  55. f.interval = interval
  56. return f
  57. }
  58. func (f HistogramScriptFacet) Param(name string, value interface{}) HistogramScriptFacet {
  59. f.params[name] = value
  60. return f
  61. }
  62. func (f HistogramScriptFacet) Comparator(comparatorType string) HistogramScriptFacet {
  63. f.comparatorType = comparatorType
  64. return f
  65. }
  66. func (f HistogramScriptFacet) addFilterFacetAndGlobal(source map[string]interface{}) {
  67. if f.facetFilter != nil {
  68. source["facet_filter"] = f.facetFilter.Source()
  69. }
  70. if f.nested != "" {
  71. source["nested"] = f.nested
  72. }
  73. if f.global != nil {
  74. source["global"] = *f.global
  75. }
  76. if f.mode != "" {
  77. source["mode"] = f.mode
  78. }
  79. }
  80. func (f HistogramScriptFacet) Source() interface{} {
  81. source := make(map[string]interface{})
  82. f.addFilterFacetAndGlobal(source)
  83. opts := make(map[string]interface{})
  84. source["histogram"] = opts
  85. if f.keyField != "" {
  86. opts["key_field"] = f.keyField
  87. } else if f.keyScript != "" {
  88. opts["key_script"] = f.keyScript
  89. }
  90. opts["value_script"] = f.valueScript
  91. if f.lang != "" {
  92. opts["lang"] = f.lang
  93. }
  94. if f.interval > 0 {
  95. opts["interval"] = f.interval
  96. }
  97. if len(f.params) > 0 {
  98. opts["params"] = f.params
  99. }
  100. if f.comparatorType != "" {
  101. opts["comparator"] = f.comparatorType
  102. }
  103. return source
  104. }