You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
2.3 KiB
89 lines
2.3 KiB
// 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 |
|
}
|
|
|