1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- // 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
- // IndicesQuery can be used when executed across multiple indices, allowing
- // to have a query that executes only when executed on an index that matches
- // a specific list of indices, and another query that executes when it is
- // executed on an index that does not match the listed indices.
- //
- // For more details, see
- // https://www.elastic.co/guide/en/elasticsearch/reference/5.2/query-dsl-indices-query.html
- type IndicesQuery struct {
- query Query
- indices []string
- noMatchQueryType string
- noMatchQuery Query
- queryName string
- }
- // NewIndicesQuery creates and initializes a new indices query.
- func NewIndicesQuery(query Query, indices ...string) *IndicesQuery {
- return &IndicesQuery{
- query: query,
- indices: indices,
- }
- }
- // NoMatchQuery sets the query to use when it executes on an index that
- // does not match the indices provided.
- func (q *IndicesQuery) NoMatchQuery(query Query) *IndicesQuery {
- q.noMatchQuery = query
- return q
- }
- // NoMatchQueryType sets the no match query which can be either all or none.
- func (q *IndicesQuery) NoMatchQueryType(typ string) *IndicesQuery {
- q.noMatchQueryType = typ
- return q
- }
- // QueryName sets the query name for the filter.
- func (q *IndicesQuery) QueryName(queryName string) *IndicesQuery {
- q.queryName = queryName
- return q
- }
- // Source returns JSON for the function score query.
- func (q *IndicesQuery) Source() (interface{}, error) {
- // {
- // "indices" : {
- // "indices" : ["index1", "index2"],
- // "query" : {
- // "term" : { "tag" : "wow" }
- // },
- // "no_match_query" : {
- // "term" : { "tag" : "kow" }
- // }
- // }
- // }
- source := make(map[string]interface{})
- params := make(map[string]interface{})
- source["indices"] = params
- params["indices"] = q.indices
- src, err := q.query.Source()
- if err != nil {
- return nil, err
- }
- params["query"] = src
- if q.noMatchQuery != nil {
- src, err := q.noMatchQuery.Source()
- if err != nil {
- return nil, err
- }
- params["no_match_query"] = src
- } else if q.noMatchQueryType != "" {
- params["no_match_query"] = q.noMatchQueryType
- }
- if q.queryName != "" {
- params["_name"] = q.queryName
- }
- return source, nil
- }
|