123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- // Copyright 2012-present Oliver Eilhard. All rights reserved.
- // Use of this source code is governed by a MIT-license.
- // See http://olivere.mit-license.org/license.txt for details.
- package elastic
- // RangeQuery matches documents with fields that have terms within a certain range.
- //
- // For details, see
- // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-range-query.html
- type RangeQuery struct {
- name string
- from interface{}
- to interface{}
- timeZone string
- includeLower bool
- includeUpper bool
- boost *float64
- queryName string
- format string
- relation string
- }
- // NewRangeQuery creates and initializes a new RangeQuery.
- func NewRangeQuery(name string) *RangeQuery {
- return &RangeQuery{name: name, includeLower: true, includeUpper: true}
- }
- // From indicates the from part of the RangeQuery.
- // Use nil to indicate an unbounded from part.
- func (q *RangeQuery) From(from interface{}) *RangeQuery {
- q.from = from
- return q
- }
- // Gt indicates a greater-than value for the from part.
- // Use nil to indicate an unbounded from part.
- func (q *RangeQuery) Gt(from interface{}) *RangeQuery {
- q.from = from
- q.includeLower = false
- return q
- }
- // Gte indicates a greater-than-or-equal value for the from part.
- // Use nil to indicate an unbounded from part.
- func (q *RangeQuery) Gte(from interface{}) *RangeQuery {
- q.from = from
- q.includeLower = true
- return q
- }
- // To indicates the to part of the RangeQuery.
- // Use nil to indicate an unbounded to part.
- func (q *RangeQuery) To(to interface{}) *RangeQuery {
- q.to = to
- return q
- }
- // Lt indicates a less-than value for the to part.
- // Use nil to indicate an unbounded to part.
- func (q *RangeQuery) Lt(to interface{}) *RangeQuery {
- q.to = to
- q.includeUpper = false
- return q
- }
- // Lte indicates a less-than-or-equal value for the to part.
- // Use nil to indicate an unbounded to part.
- func (q *RangeQuery) Lte(to interface{}) *RangeQuery {
- q.to = to
- q.includeUpper = true
- return q
- }
- // IncludeLower indicates whether the lower bound should be included or not.
- // Defaults to true.
- func (q *RangeQuery) IncludeLower(includeLower bool) *RangeQuery {
- q.includeLower = includeLower
- return q
- }
- // IncludeUpper indicates whether the upper bound should be included or not.
- // Defaults to true.
- func (q *RangeQuery) IncludeUpper(includeUpper bool) *RangeQuery {
- q.includeUpper = includeUpper
- return q
- }
- // Boost sets the boost for this query.
- func (q *RangeQuery) Boost(boost float64) *RangeQuery {
- q.boost = &boost
- return q
- }
- // QueryName sets the query name for the filter that can be used when
- // searching for matched_filters per hit.
- func (q *RangeQuery) QueryName(queryName string) *RangeQuery {
- q.queryName = queryName
- return q
- }
- // TimeZone is used for date fields. In that case, we can adjust the
- // from/to fields using a timezone.
- func (q *RangeQuery) TimeZone(timeZone string) *RangeQuery {
- q.timeZone = timeZone
- return q
- }
- // Format is used for date fields. In that case, we can set the format
- // to be used instead of the mapper format.
- func (q *RangeQuery) Format(format string) *RangeQuery {
- q.format = format
- return q
- }
- // Relation is used for range fields. which can be one of
- // "within", "contains", "intersects" (default) and "disjoint".
- func (q *RangeQuery) Relation(relation string) *RangeQuery {
- q.relation = relation
- return q
- }
- // Source returns JSON for the query.
- func (q *RangeQuery) Source() (interface{}, error) {
- source := make(map[string]interface{})
- rangeQ := make(map[string]interface{})
- source["range"] = rangeQ
- params := make(map[string]interface{})
- rangeQ[q.name] = params
- params["from"] = q.from
- params["to"] = q.to
- if q.timeZone != "" {
- params["time_zone"] = q.timeZone
- }
- if q.format != "" {
- params["format"] = q.format
- }
- if q.relation != "" {
- params["relation"] = q.relation
- }
- if q.boost != nil {
- params["boost"] = *q.boost
- }
- params["include_lower"] = q.includeLower
- params["include_upper"] = q.includeUpper
- if q.queryName != "" {
- rangeQ["_name"] = q.queryName
- }
- return source, nil
- }
|