123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- // Copyright 2012-2015 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
- // FuzzyFuzzyCompletionSuggester is a FuzzyCompletionSuggester that allows fuzzy
- // completion.
- // See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html
- // for details, and
- // http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-suggesters-completion.html#fuzzy
- // for details about the fuzzy completion suggester.
- type FuzzyCompletionSuggester struct {
- Suggester
- name string
- text string
- field string
- analyzer string
- size *int
- shardSize *int
- contextQueries []SuggesterContextQuery
- fuzziness interface{}
- fuzzyTranspositions *bool
- fuzzyMinLength *int
- fuzzyPrefixLength *int
- unicodeAware *bool
- }
- // Creates a new completion suggester.
- func NewFuzzyCompletionSuggester(name string) FuzzyCompletionSuggester {
- return FuzzyCompletionSuggester{
- name: name,
- contextQueries: make([]SuggesterContextQuery, 0),
- }
- }
- func (q FuzzyCompletionSuggester) Name() string {
- return q.name
- }
- func (q FuzzyCompletionSuggester) Text(text string) FuzzyCompletionSuggester {
- q.text = text
- return q
- }
- func (q FuzzyCompletionSuggester) Field(field string) FuzzyCompletionSuggester {
- q.field = field
- return q
- }
- func (q FuzzyCompletionSuggester) Analyzer(analyzer string) FuzzyCompletionSuggester {
- q.analyzer = analyzer
- return q
- }
- func (q FuzzyCompletionSuggester) Size(size int) FuzzyCompletionSuggester {
- q.size = &size
- return q
- }
- func (q FuzzyCompletionSuggester) ShardSize(shardSize int) FuzzyCompletionSuggester {
- q.shardSize = &shardSize
- return q
- }
- func (q FuzzyCompletionSuggester) ContextQuery(query SuggesterContextQuery) FuzzyCompletionSuggester {
- q.contextQueries = append(q.contextQueries, query)
- return q
- }
- func (q FuzzyCompletionSuggester) ContextQueries(queries ...SuggesterContextQuery) FuzzyCompletionSuggester {
- q.contextQueries = append(q.contextQueries, queries...)
- return q
- }
- // Fuzziness defines the strategy used to describe what "fuzzy" actually
- // means for the suggester, e.g. 1, 2, "0", "1..2", ">4", or "AUTO".
- // See http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/common-options.html#fuzziness
- // for a detailed description.
- func (q FuzzyCompletionSuggester) Fuzziness(fuzziness interface{}) FuzzyCompletionSuggester {
- q.fuzziness = fuzziness
- return q
- }
- func (q FuzzyCompletionSuggester) FuzzyTranspositions(fuzzyTranspositions bool) FuzzyCompletionSuggester {
- q.fuzzyTranspositions = &fuzzyTranspositions
- return q
- }
- func (q FuzzyCompletionSuggester) FuzzyMinLength(minLength int) FuzzyCompletionSuggester {
- q.fuzzyMinLength = &minLength
- return q
- }
- func (q FuzzyCompletionSuggester) FuzzyPrefixLength(prefixLength int) FuzzyCompletionSuggester {
- q.fuzzyPrefixLength = &prefixLength
- return q
- }
- func (q FuzzyCompletionSuggester) UnicodeAware(unicodeAware bool) FuzzyCompletionSuggester {
- q.unicodeAware = &unicodeAware
- return q
- }
- // Creates the source for the completion suggester.
- func (q FuzzyCompletionSuggester) Source(includeName bool) interface{} {
- cs := &completionSuggesterRequest{}
- if q.text != "" {
- cs.Text = q.text
- }
- 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:
- suggester["context"] = q.contextQueries[0].Source()
- default:
- ctxq := make([]interface{}, 0)
- for _, query := range q.contextQueries {
- ctxq = append(ctxq, query.Source())
- }
- suggester["context"] = ctxq
- }
- // Fuzzy Completion Suggester fields
- if q.fuzziness != nil {
- suggester["fuzziness"] = q.fuzziness
- }
- if q.fuzzyTranspositions != nil {
- suggester["transpositions"] = *q.fuzzyTranspositions
- }
- if q.fuzzyMinLength != nil {
- suggester["min_length"] = *q.fuzzyMinLength
- }
- if q.fuzzyPrefixLength != nil {
- suggester["prefix_length"] = *q.fuzzyPrefixLength
- }
- if q.unicodeAware != nil {
- suggester["unicode_aware"] = *q.unicodeAware
- }
- if !includeName {
- return cs
- }
- source := make(map[string]interface{})
- source[q.name] = cs
- return source
- }
|