-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathsearch_queries_interval_rules_any_of.go
60 lines (49 loc) · 1.49 KB
/
search_queries_interval_rules_any_of.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package elastic
var (
_ IntervalQueryRule = (*IntervalQueryRuleAnyOf)(nil)
)
// IntervalQueryRuleAnyOf is an implementation of IntervalQueryRule.
//
// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#intervals-any_of
// for details.
type IntervalQueryRuleAnyOf struct {
intervals []IntervalQueryRule
filter *IntervalQueryFilter
}
// NewIntervalQueryRuleAnyOf initializes and returns a new instance
// of IntervalQueryRuleAnyOf.
func NewIntervalQueryRuleAnyOf(intervals ...IntervalQueryRule) *IntervalQueryRuleAnyOf {
return &IntervalQueryRuleAnyOf{intervals: intervals}
}
// Filter adds an additional interval filter.
func (r *IntervalQueryRuleAnyOf) Filter(filter *IntervalQueryFilter) *IntervalQueryRuleAnyOf {
r.filter = filter
return r
}
// Source returns JSON for the function score query.
func (r *IntervalQueryRuleAnyOf) Source() (interface{}, error) {
source := make(map[string]interface{})
var intervalSources []interface{}
for _, interval := range r.intervals {
src, err := interval.Source()
if err != nil {
return nil, err
}
intervalSources = append(intervalSources, src)
}
source["intervals"] = intervalSources
if r.filter != nil {
src, err := r.filter.Source()
if err != nil {
return nil, err
}
source["filter"] = src
}
return map[string]interface{}{
"any_of": source,
}, nil
}
// isIntervalQueryRule implements the marker interface.
func (r *IntervalQueryRuleAnyOf) isIntervalQueryRule() bool {
return true
}