123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 |
- // 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
- // Allow to specify field facets that return the N most frequent terms.
- // See: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-facets-terms-facet.html
- type TermsFacet struct {
- facetFilter Filter
- global *bool
- nested string
- mode string
- fieldName string
- fields []string
- size int
- shardSize *int
- allTerms *bool
- exclude []string
- regex string
- regexFlags string
- comparatorType string
- script string
- lang string
- params map[string]interface{}
- executionHint string
- index string
- }
- func NewTermsFacet() TermsFacet {
- f := TermsFacet{
- size: 10,
- fields: make([]string, 0),
- exclude: make([]string, 0),
- params: make(map[string]interface{}),
- }
- return f
- }
- func (f TermsFacet) FacetFilter(filter Facet) TermsFacet {
- f.facetFilter = filter
- return f
- }
- func (f TermsFacet) Global(global bool) TermsFacet {
- f.global = &global
- return f
- }
- func (f TermsFacet) Nested(nested string) TermsFacet {
- f.nested = nested
- return f
- }
- func (f TermsFacet) Mode(mode string) TermsFacet {
- f.mode = mode
- return f
- }
- func (f TermsFacet) Field(fieldName string) TermsFacet {
- f.fieldName = fieldName
- return f
- }
- func (f TermsFacet) Fields(fields ...string) TermsFacet {
- f.fields = append(f.fields, fields...)
- return f
- }
- func (f TermsFacet) ScriptField(scriptField string) TermsFacet {
- f.script = scriptField
- return f
- }
- func (f TermsFacet) Exclude(exclude ...string) TermsFacet {
- f.exclude = append(f.exclude, exclude...)
- return f
- }
- func (f TermsFacet) Size(size int) TermsFacet {
- f.size = size
- return f
- }
- func (f TermsFacet) ShardSize(shardSize int) TermsFacet {
- f.shardSize = &shardSize
- return f
- }
- func (f TermsFacet) Regex(regex string) TermsFacet {
- f.regex = regex
- return f
- }
- func (f TermsFacet) RegexFlags(regexFlags string) TermsFacet {
- f.regexFlags = regexFlags
- return f
- }
- func (f TermsFacet) Order(order string) TermsFacet {
- f.comparatorType = order
- return f
- }
- func (f TermsFacet) Comparator(comparatorType string) TermsFacet {
- f.comparatorType = comparatorType
- return f
- }
- func (f TermsFacet) Script(script string) TermsFacet {
- f.script = script
- return f
- }
- func (f TermsFacet) Lang(lang string) TermsFacet {
- f.lang = lang
- return f
- }
- func (f TermsFacet) ExecutionHint(hint string) TermsFacet {
- f.executionHint = hint
- return f
- }
- func (f TermsFacet) Param(name string, value interface{}) TermsFacet {
- f.params[name] = value
- return f
- }
- func (f TermsFacet) AllTerms(allTerms bool) TermsFacet {
- f.allTerms = &allTerms
- return f
- }
- func (f TermsFacet) Index(index string) TermsFacet {
- f.index = index
- return f
- }
- func (f TermsFacet) addFilterFacetAndGlobal(source map[string]interface{}) {
- if f.facetFilter != nil {
- source["facet_filter"] = f.facetFilter.Source()
- }
- if f.nested != "" {
- source["nested"] = f.nested
- }
- if f.global != nil {
- source["global"] = *f.global
- }
- if f.mode != "" {
- source["mode"] = f.mode
- }
- }
- func (f TermsFacet) Source() interface{} {
- source := make(map[string]interface{})
- f.addFilterFacetAndGlobal(source)
- opts := make(map[string]interface{})
- source["terms"] = opts
- if len(f.fields) > 0 {
- if len(f.fields) == 1 {
- opts["field"] = f.fields[0]
- } else {
- opts["fields"] = f.fields
- }
- } else {
- opts["field"] = f.fieldName
- }
- opts["size"] = f.size
- if f.shardSize != nil && *f.shardSize > f.size {
- opts["shard_size"] = *f.shardSize
- }
- if len(f.exclude) > 0 {
- opts["exclude"] = f.exclude
- }
- if f.regex != "" {
- opts["regex"] = f.regex
- if f.regexFlags != "" {
- opts["regex_flags"] = f.regexFlags
- }
- }
- if f.comparatorType != "" {
- opts["order"] = f.comparatorType
- }
- if f.allTerms != nil {
- opts["all_terms"] = *f.allTerms
- }
- if f.script != "" {
- opts["script"] = f.script
- if f.lang != "" {
- opts["lang"] = f.lang
- }
- if len(f.params) > 0 {
- opts["params"] = f.params
- }
- }
- if f.executionHint != "" {
- opts["execution_hint"] = f.executionHint
- }
- return source
- }
|