search_queries_simple_query_string.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. "fmt"
  7. "strings"
  8. )
  9. // SimpleQueryStringQuery is a query that uses the SimpleQueryParser
  10. // to parse its context. Unlike the regular query_string query,
  11. // the simple_query_string query will never throw an exception,
  12. // and discards invalid parts of the query.
  13. // For more details, see
  14. // http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-simple-query-string-query.html
  15. type SimpleQueryStringQuery struct {
  16. queryText string
  17. analyzer string
  18. operator string
  19. fields []string
  20. fieldBoosts map[string]*float32
  21. }
  22. // Creates a new simple query string query.
  23. func NewSimpleQueryStringQuery(text string) SimpleQueryStringQuery {
  24. q := SimpleQueryStringQuery{
  25. queryText: text,
  26. fields: make([]string, 0),
  27. fieldBoosts: make(map[string]*float32),
  28. }
  29. return q
  30. }
  31. func (q SimpleQueryStringQuery) Field(field string) SimpleQueryStringQuery {
  32. q.fields = append(q.fields, field)
  33. return q
  34. }
  35. func (q SimpleQueryStringQuery) FieldWithBoost(field string, boost float32) SimpleQueryStringQuery {
  36. q.fields = append(q.fields, field)
  37. q.fieldBoosts[field] = &boost
  38. return q
  39. }
  40. func (q SimpleQueryStringQuery) Analyzer(analyzer string) SimpleQueryStringQuery {
  41. q.analyzer = analyzer
  42. return q
  43. }
  44. func (q SimpleQueryStringQuery) DefaultOperator(defaultOperator string) SimpleQueryStringQuery {
  45. q.operator = defaultOperator
  46. return q
  47. }
  48. // Creates the query source for the query string query.
  49. func (q SimpleQueryStringQuery) Source() interface{} {
  50. // {
  51. // "simple_query_string" : {
  52. // "query" : "\"fried eggs\" +(eggplant | potato) -frittata",
  53. // "analyzer" : "snowball",
  54. // "fields" : ["body^5","_all"],
  55. // "default_operator" : "and"
  56. // }
  57. // }
  58. source := make(map[string]interface{})
  59. query := make(map[string]interface{})
  60. source["simple_query_string"] = query
  61. query["query"] = q.queryText
  62. if len(q.fields) > 0 {
  63. fields := make([]string, 0)
  64. for _, field := range q.fields {
  65. if boost, found := q.fieldBoosts[field]; found {
  66. if boost != nil {
  67. fields = append(fields, fmt.Sprintf("%s^%f", field, *boost))
  68. } else {
  69. fields = append(fields, field)
  70. }
  71. } else {
  72. fields = append(fields, field)
  73. }
  74. }
  75. query["fields"] = fields
  76. }
  77. if q.analyzer != "" {
  78. query["analyzer"] = q.analyzer
  79. }
  80. if q.operator != "" {
  81. query["default_operator"] = strings.ToLower(q.operator)
  82. }
  83. return source
  84. }