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