summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/olivere/elastic/suggester_completion.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/olivere/elastic/suggester_completion.go')
-rw-r--r--vendor/github.com/olivere/elastic/suggester_completion.go352
1 files changed, 0 insertions, 352 deletions
diff --git a/vendor/github.com/olivere/elastic/suggester_completion.go b/vendor/github.com/olivere/elastic/suggester_completion.go
deleted file mode 100644
index d2b4a326c..000000000
--- a/vendor/github.com/olivere/elastic/suggester_completion.go
+++ /dev/null
@@ -1,352 +0,0 @@
-// 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 "errors"
-
-// CompletionSuggester is a fast suggester for e.g. type-ahead completion.
-// See https://www.elastic.co/guide/en/elasticsearch/reference/5.2/search-suggesters-completion.html
-// for more details.
-type CompletionSuggester struct {
- Suggester
- name string
- text string
- prefix string
- regex string
- field string
- analyzer string
- size *int
- shardSize *int
- contextQueries []SuggesterContextQuery
- payload interface{}
-
- fuzzyOptions *FuzzyCompletionSuggesterOptions
- regexOptions *RegexCompletionSuggesterOptions
- skipDuplicates *bool
-}
-
-// Creates a new completion suggester.
-func NewCompletionSuggester(name string) *CompletionSuggester {
- return &CompletionSuggester{
- name: name,
- }
-}
-
-func (q *CompletionSuggester) Name() string {
- return q.name
-}
-
-func (q *CompletionSuggester) Text(text string) *CompletionSuggester {
- q.text = text
- return q
-}
-
-func (q *CompletionSuggester) Prefix(prefix string) *CompletionSuggester {
- q.prefix = prefix
- return q
-}
-
-func (q *CompletionSuggester) PrefixWithEditDistance(prefix string, editDistance interface{}) *CompletionSuggester {
- q.prefix = prefix
- q.fuzzyOptions = NewFuzzyCompletionSuggesterOptions().EditDistance(editDistance)
- return q
-}
-
-func (q *CompletionSuggester) PrefixWithOptions(prefix string, options *FuzzyCompletionSuggesterOptions) *CompletionSuggester {
- q.prefix = prefix
- q.fuzzyOptions = options
- return q
-}
-
-func (q *CompletionSuggester) FuzzyOptions(options *FuzzyCompletionSuggesterOptions) *CompletionSuggester {
- q.fuzzyOptions = options
- return q
-}
-
-func (q *CompletionSuggester) Fuzziness(fuzziness interface{}) *CompletionSuggester {
- if q.fuzzyOptions == nil {
- q.fuzzyOptions = NewFuzzyCompletionSuggesterOptions()
- }
- q.fuzzyOptions = q.fuzzyOptions.EditDistance(fuzziness)
- return q
-}
-
-func (q *CompletionSuggester) Regex(regex string) *CompletionSuggester {
- q.regex = regex
- return q
-}
-
-func (q *CompletionSuggester) RegexWithOptions(regex string, options *RegexCompletionSuggesterOptions) *CompletionSuggester {
- q.regex = regex
- q.regexOptions = options
- return q
-}
-
-func (q *CompletionSuggester) RegexOptions(options *RegexCompletionSuggesterOptions) *CompletionSuggester {
- q.regexOptions = options
- return q
-}
-
-func (q *CompletionSuggester) SkipDuplicates(skipDuplicates bool) *CompletionSuggester {
- q.skipDuplicates = &skipDuplicates
- return q
-}
-
-func (q *CompletionSuggester) Field(field string) *CompletionSuggester {
- q.field = field
- return q
-}
-
-func (q *CompletionSuggester) Analyzer(analyzer string) *CompletionSuggester {
- q.analyzer = analyzer
- return q
-}
-
-func (q *CompletionSuggester) Size(size int) *CompletionSuggester {
- q.size = &size
- return q
-}
-
-func (q *CompletionSuggester) ShardSize(shardSize int) *CompletionSuggester {
- q.shardSize = &shardSize
- return q
-}
-
-func (q *CompletionSuggester) ContextQuery(query SuggesterContextQuery) *CompletionSuggester {
- q.contextQueries = append(q.contextQueries, query)
- return q
-}
-
-func (q *CompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) *CompletionSuggester {
- q.contextQueries = append(q.contextQueries, queries...)
- return q
-}
-
-// completionSuggesterRequest is necessary because the order in which
-// the JSON elements are routed to Elasticsearch is relevant.
-// We got into trouble when using plain maps because the text element
-// needs to go before the completion element.
-type completionSuggesterRequest struct {
- Text string `json:"text,omitempty"`
- Prefix string `json:"prefix,omitempty"`
- Regex string `json:"regex,omitempty"`
- Completion interface{} `json:"completion,omitempty"`
-}
-
-// Source creates the JSON data for the completion suggester.
-func (q *CompletionSuggester) Source(includeName bool) (interface{}, error) {
- cs := &completionSuggesterRequest{}
-
- if q.text != "" {
- cs.Text = q.text
- }
- if q.prefix != "" {
- cs.Prefix = q.prefix
- }
- if q.regex != "" {
- cs.Regex = q.regex
- }
-
- suggester := make(map[string]interface{})
- cs.Completion = suggester
-
- if q.analyzer != "" {
- suggester["analyzer"] = q.analyzer
- }
- if q.field != "" {
- suggester["field"] = q.field
- }
- if q.size != nil {
- suggester["size"] = *q.size
- }
- if q.shardSize != nil {
- suggester["shard_size"] = *q.shardSize
- }
- switch len(q.contextQueries) {
- case 0:
- case 1:
- src, err := q.contextQueries[0].Source()
- if err != nil {
- return nil, err
- }
- suggester["contexts"] = src
- default:
- ctxq := make(map[string]interface{})
- for _, query := range q.contextQueries {
- src, err := query.Source()
- if err != nil {
- return nil, err
- }
- // Merge the dictionary into ctxq
- m, ok := src.(map[string]interface{})
- if !ok {
- return nil, errors.New("elastic: context query is not a map")
- }
- for k, v := range m {
- ctxq[k] = v
- }
- }
- suggester["contexts"] = ctxq
- }
-
- // Fuzzy options
- if q.fuzzyOptions != nil {
- src, err := q.fuzzyOptions.Source()
- if err != nil {
- return nil, err
- }
- suggester["fuzzy"] = src
- }
-
- // Regex options
- if q.regexOptions != nil {
- src, err := q.regexOptions.Source()
- if err != nil {
- return nil, err
- }
- suggester["regex"] = src
- }
-
- if q.skipDuplicates != nil {
- suggester["skip_duplicates"] = *q.skipDuplicates
- }
-
- // TODO(oe) Add completion-suggester specific parameters here
-
- if !includeName {
- return cs, nil
- }
-
- source := make(map[string]interface{})
- source[q.name] = cs
- return source, nil
-}
-
-// -- Fuzzy options --
-
-// FuzzyCompletionSuggesterOptions represents the options for fuzzy completion suggester.
-type FuzzyCompletionSuggesterOptions struct {
- editDistance interface{}
- transpositions *bool
- minLength *int
- prefixLength *int
- unicodeAware *bool
- maxDeterminizedStates *int
-}
-
-// NewFuzzyCompletionSuggesterOptions initializes a new FuzzyCompletionSuggesterOptions instance.
-func NewFuzzyCompletionSuggesterOptions() *FuzzyCompletionSuggesterOptions {
- return &FuzzyCompletionSuggesterOptions{}
-}
-
-// EditDistance specifies the maximum number of edits, e.g. a number like "1" or "2"
-// or a string like "0..2" or ">5". See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/common-options.html#fuzziness
-// for details.
-func (o *FuzzyCompletionSuggesterOptions) EditDistance(editDistance interface{}) *FuzzyCompletionSuggesterOptions {
- o.editDistance = editDistance
- return o
-}
-
-// Transpositions, if set to true, are counted as one change instead of two (defaults to true).
-func (o *FuzzyCompletionSuggesterOptions) Transpositions(transpositions bool) *FuzzyCompletionSuggesterOptions {
- o.transpositions = &transpositions
- return o
-}
-
-// MinLength represents the minimum length of the input before fuzzy suggestions are returned (defaults to 3).
-func (o *FuzzyCompletionSuggesterOptions) MinLength(minLength int) *FuzzyCompletionSuggesterOptions {
- o.minLength = &minLength
- return o
-}
-
-// PrefixLength represents the minimum length of the input, which is not checked for
-// fuzzy alternatives (defaults to 1).
-func (o *FuzzyCompletionSuggesterOptions) PrefixLength(prefixLength int) *FuzzyCompletionSuggesterOptions {
- o.prefixLength = &prefixLength
- return o
-}
-
-// UnicodeAware, if true, all measurements (like fuzzy edit distance, transpositions, and lengths)
-// are measured in Unicode code points instead of in bytes. This is slightly slower than
-// raw bytes, so it is set to false by default.
-func (o *FuzzyCompletionSuggesterOptions) UnicodeAware(unicodeAware bool) *FuzzyCompletionSuggesterOptions {
- o.unicodeAware = &unicodeAware
- return o
-}
-
-// MaxDeterminizedStates is currently undocumented in Elasticsearch. It represents
-// the maximum automaton states allowed for fuzzy expansion.
-func (o *FuzzyCompletionSuggesterOptions) MaxDeterminizedStates(max int) *FuzzyCompletionSuggesterOptions {
- o.maxDeterminizedStates = &max
- return o
-}
-
-// Source creates the JSON data.
-func (o *FuzzyCompletionSuggesterOptions) Source() (interface{}, error) {
- out := make(map[string]interface{})
-
- if o.editDistance != nil {
- out["fuzziness"] = o.editDistance
- }
- if o.transpositions != nil {
- out["transpositions"] = *o.transpositions
- }
- if o.minLength != nil {
- out["min_length"] = *o.minLength
- }
- if o.prefixLength != nil {
- out["prefix_length"] = *o.prefixLength
- }
- if o.unicodeAware != nil {
- out["unicode_aware"] = *o.unicodeAware
- }
- if o.maxDeterminizedStates != nil {
- out["max_determinized_states"] = *o.maxDeterminizedStates
- }
-
- return out, nil
-}
-
-// -- Regex options --
-
-// RegexCompletionSuggesterOptions represents the options for regex completion suggester.
-type RegexCompletionSuggesterOptions struct {
- flags interface{} // string or int
- maxDeterminizedStates *int
-}
-
-// NewRegexCompletionSuggesterOptions initializes a new RegexCompletionSuggesterOptions instance.
-func NewRegexCompletionSuggesterOptions() *RegexCompletionSuggesterOptions {
- return &RegexCompletionSuggesterOptions{}
-}
-
-// Flags represents internal regex flags. See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-suggesters-completion.html#regex
-// for details.
-func (o *RegexCompletionSuggesterOptions) Flags(flags interface{}) *RegexCompletionSuggesterOptions {
- o.flags = flags
- return o
-}
-
-// MaxDeterminizedStates represents the maximum automaton states allowed for regex expansion.
-// See https://www.elastic.co/guide/en/elasticsearch/reference/5.6/search-suggesters-completion.html#regex
-// for details.
-func (o *RegexCompletionSuggesterOptions) MaxDeterminizedStates(max int) *RegexCompletionSuggesterOptions {
- o.maxDeterminizedStates = &max
- return o
-}
-
-// Source creates the JSON data.
-func (o *RegexCompletionSuggesterOptions) Source() (interface{}, error) {
- out := make(map[string]interface{})
-
- if o.flags != nil {
- out["flags"] = o.flags
- }
- if o.maxDeterminizedStates != nil {
- out["max_determinized_states"] = *o.maxDeterminizedStates
- }
-
- return out, nil
-}