search_queries_term.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. // A term query matches documents that contain
  6. // a term (not analyzed). For more details, see
  7. // http://www.elasticsearch.org/guide/reference/query-dsl/term-query.html
  8. type TermQuery struct {
  9. Query
  10. name string
  11. value interface{}
  12. boost *float32
  13. queryName string
  14. }
  15. // Creates a new term query.
  16. func NewTermQuery(name string, value interface{}) TermQuery {
  17. t := TermQuery{name: name, value: value}
  18. return t
  19. }
  20. func (q TermQuery) Boost(boost float32) TermQuery {
  21. q.boost = &boost
  22. return q
  23. }
  24. func (q TermQuery) QueryName(queryName string) TermQuery {
  25. q.queryName = queryName
  26. return q
  27. }
  28. // Creates the query source for the term query.
  29. func (q TermQuery) Source() interface{} {
  30. // {"term":{"name":"value"}}
  31. source := make(map[string]interface{})
  32. tq := make(map[string]interface{})
  33. source["term"] = tq
  34. if q.boost == nil && q.queryName == "" {
  35. tq[q.name] = q.value
  36. } else {
  37. subQ := make(map[string]interface{})
  38. subQ["value"] = q.value
  39. if q.boost != nil {
  40. subQ["boost"] = *q.boost
  41. }
  42. if q.queryName != "" {
  43. subQ["_name"] = q.queryName
  44. }
  45. tq[q.name] = subQ
  46. }
  47. return source
  48. }