// ESBaseQuery builds the base query that both ESCount and ESStat share func ESBaseQuery(now time.Time, indexer ESIndexer, l ElasticHosts, filter elastic.Query, sduration, eduration string, size int) (*ElasticRequest, error) { start, err := opentsdb.ParseDuration(sduration) if err != nil { return nil, err } var end opentsdb.Duration if eduration != "" { end, err = opentsdb.ParseDuration(eduration) if err != nil { return nil, err } } st := now.Add(time.Duration(-start)) en := now.Add(time.Duration(-end)) r := ElasticRequest{ Indexer: indexer, Start: &st, End: &en, Source: elastic.NewSearchSource().Size(size), } var q elastic.Query q = elastic.NewRangeQuery(indexer.TimeField).Gte(st).Lte(en) r.Source = r.Source.Query(elastic.NewBoolQuery().Must(q, filter)) return &r, nil }
func (r *ElasticRequest) Scope(ts *opentsdb.TagSet) { var filters []elastic.Query for tagKey, tagValue := range *ts { filters = append(filters, elastic.NewTermQuery(tagKey, tagValue)) } b := elastic.NewBoolQuery().Must(filters...) r.Source = r.Source.Query(b) }
func ScopeES(ts opentsdb.TagSet, q elastic.Query) elastic.Query { var filters []elastic.Query for tagKey, tagValue := range ts { filters = append(filters, elastic.NewTermQuery(tagKey, tagValue)) } filters = append(filters, q) b := elastic.NewBoolQuery().Must(filters...) return b }
func ESOr(e *State, T miniprofiler.Timer, esqueries ...ESQuery) (*Results, error) { var r Results queries := make([]elastic.Query, len(esqueries)) for i, q := range esqueries { queries[i] = q.Query } q := ESQuery{ Query: elastic.NewBoolQuery().Should(queries...).MinimumNumberShouldMatch(1), } r.Results = append(r.Results, &Result{Value: q}) return &r, nil }