summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/olivere/elastic/suggest_field.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/olivere/elastic/suggest_field.go')
-rw-r--r--vendor/github.com/olivere/elastic/suggest_field.go90
1 files changed, 90 insertions, 0 deletions
diff --git a/vendor/github.com/olivere/elastic/suggest_field.go b/vendor/github.com/olivere/elastic/suggest_field.go
new file mode 100644
index 000000000..8405a6f9e
--- /dev/null
+++ b/vendor/github.com/olivere/elastic/suggest_field.go
@@ -0,0 +1,90 @@
+// 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
+
+import (
+ "encoding/json"
+ "errors"
+)
+
+// SuggestField can be used by the caller to specify a suggest field
+// at index time. For a detailed example, see e.g.
+// https://www.elastic.co/blog/you-complete-me.
+type SuggestField struct {
+ inputs []string
+ weight int
+ contextQueries []SuggesterContextQuery
+}
+
+func NewSuggestField(input ...string) *SuggestField {
+ return &SuggestField{
+ inputs: input,
+ weight: -1,
+ }
+}
+
+func (f *SuggestField) Input(input ...string) *SuggestField {
+ if f.inputs == nil {
+ f.inputs = make([]string, 0)
+ }
+ f.inputs = append(f.inputs, input...)
+ return f
+}
+
+func (f *SuggestField) Weight(weight int) *SuggestField {
+ f.weight = weight
+ return f
+}
+
+func (f *SuggestField) ContextQuery(queries ...SuggesterContextQuery) *SuggestField {
+ f.contextQueries = append(f.contextQueries, queries...)
+ return f
+}
+
+// MarshalJSON encodes SuggestField into JSON.
+func (f *SuggestField) MarshalJSON() ([]byte, error) {
+ source := make(map[string]interface{})
+
+ if f.inputs != nil {
+ switch len(f.inputs) {
+ case 1:
+ source["input"] = f.inputs[0]
+ default:
+ source["input"] = f.inputs
+ }
+ }
+
+ if f.weight >= 0 {
+ source["weight"] = f.weight
+ }
+
+ switch len(f.contextQueries) {
+ case 0:
+ case 1:
+ src, err := f.contextQueries[0].Source()
+ if err != nil {
+ return nil, err
+ }
+ source["contexts"] = src
+ default:
+ ctxq := make(map[string]interface{})
+ for _, query := range f.contextQueries {
+ src, err := query.Source()
+ if err != nil {
+ return nil, err
+ }
+ m, ok := src.(map[string]interface{})
+ if !ok {
+ return nil, errors.New("SuggesterContextQuery must be of type map[string]interface{}")
+ }
+ for k, v := range m {
+ ctxq[k] = v
+ }
+ }
+ source["contexts"] = ctxq
+ }
+
+ return json.Marshal(source)
+}