search_facets_query.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. // Query Facet
  6. // See: http://www.elasticsearch.org/guide/reference/api/search/facets/query-facet.html
  7. type QueryFacet struct {
  8. facetFilter Filter
  9. global *bool
  10. nested string
  11. mode string
  12. query Query
  13. }
  14. func NewQueryFacet() QueryFacet {
  15. return QueryFacet{}
  16. }
  17. func (f QueryFacet) FacetFilter(filter Facet) QueryFacet {
  18. f.facetFilter = filter
  19. return f
  20. }
  21. func (f QueryFacet) Global(global bool) QueryFacet {
  22. f.global = &global
  23. return f
  24. }
  25. func (f QueryFacet) Nested(nested string) QueryFacet {
  26. f.nested = nested
  27. return f
  28. }
  29. func (f QueryFacet) Mode(mode string) QueryFacet {
  30. f.mode = mode
  31. return f
  32. }
  33. func (f QueryFacet) Query(query Query) QueryFacet {
  34. f.query = query
  35. return f
  36. }
  37. func (f QueryFacet) addFilterFacetAndGlobal(source map[string]interface{}) {
  38. if f.facetFilter != nil {
  39. source["facet_filter"] = f.facetFilter.Source()
  40. }
  41. if f.nested != "" {
  42. source["nested"] = f.nested
  43. }
  44. if f.global != nil {
  45. source["global"] = *f.global
  46. }
  47. if f.mode != "" {
  48. source["mode"] = f.mode
  49. }
  50. }
  51. func (f QueryFacet) Source() interface{} {
  52. source := make(map[string]interface{})
  53. f.addFilterFacetAndGlobal(source)
  54. source["query"] = f.query.Source()
  55. return source
  56. }