mirror of
https://github.com/go-gitea/gitea
synced 2024-09-27 14:54:05 +00:00
12a1f914f4
* update github.com/alecthomas/chroma v0.8.0 -> v0.8.1 * github.com/blevesearch/bleve v1.0.10 -> v1.0.12 * editorconfig-core-go v2.1.1 -> v2.3.7 * github.com/gliderlabs/ssh v0.2.2 -> v0.3.1 * migrate editorconfig.ParseBytes to Parse * github.com/shurcooL/vfsgen to 0d455de96546 * github.com/go-git/go-git/v5 v5.1.0 -> v5.2.0 * github.com/google/uuid v1.1.1 -> v1.1.2 * github.com/huandu/xstrings v1.3.0 -> v1.3.2 * github.com/klauspost/compress v1.10.11 -> v1.11.1 * github.com/markbates/goth v1.61.2 -> v1.65.0 * github.com/mattn/go-sqlite3 v1.14.0 -> v1.14.4 * github.com/mholt/archiver v3.3.0 -> v3.3.2 * github.com/microcosm-cc/bluemonday 4f7140c49acb -> v1.0.4 * github.com/minio/minio-go v7.0.4 -> v7.0.5 * github.com/olivere/elastic v7.0.9 -> v7.0.20 * github.com/urfave/cli v1.20.0 -> v1.22.4 * github.com/prometheus/client_golang v1.1.0 -> v1.8.0 * github.com/xanzy/go-gitlab v0.37.0 -> v0.38.1 * mvdan.cc/xurls v2.1.0 -> v2.2.0 Co-authored-by: Lauris BH <lauris@nix.lv>
176 lines
4.5 KiB
Go
Vendored
176 lines
4.5 KiB
Go
Vendored
package elastic
|
|
|
|
var (
|
|
_ IntervalQueryRule = (*IntervalQueryFilter)(nil)
|
|
)
|
|
|
|
// IntervalQueryFilter specifies filters used in some
|
|
// IntervalQueryRule implementations, e.g. IntervalQueryRuleAllOf.
|
|
//
|
|
// See https://www.elastic.co/guide/en/elasticsearch/reference/7.5/query-dsl-intervals-query.html#interval_filter
|
|
// for details.
|
|
type IntervalQueryFilter struct {
|
|
after IntervalQueryRule
|
|
before IntervalQueryRule
|
|
containedBy IntervalQueryRule
|
|
containing IntervalQueryRule
|
|
overlapping IntervalQueryRule
|
|
notContainedBy IntervalQueryRule
|
|
notContaining IntervalQueryRule
|
|
notOverlapping IntervalQueryRule
|
|
script *Script
|
|
}
|
|
|
|
// NewIntervalQueryFilter initializes and creates a new
|
|
// IntervalQueryFilter.
|
|
func NewIntervalQueryFilter() *IntervalQueryFilter {
|
|
return &IntervalQueryFilter{}
|
|
}
|
|
|
|
// After specifies the query to be used to return intervals that follow
|
|
// an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) After(after IntervalQueryRule) *IntervalQueryFilter {
|
|
r.after = after
|
|
return r
|
|
}
|
|
|
|
// Before specifies the query to be used to return intervals that occur
|
|
// before an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) Before(before IntervalQueryRule) *IntervalQueryFilter {
|
|
r.before = before
|
|
return r
|
|
}
|
|
|
|
// ContainedBy specifies the query to be used to return intervals contained
|
|
// by an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) ContainedBy(containedBy IntervalQueryRule) *IntervalQueryFilter {
|
|
r.containedBy = containedBy
|
|
return r
|
|
}
|
|
|
|
// Containing specifies the query to be used to return intervals that contain an
|
|
// interval from the filter rule.
|
|
func (r *IntervalQueryFilter) Containing(containing IntervalQueryRule) *IntervalQueryFilter {
|
|
r.containing = containing
|
|
return r
|
|
}
|
|
|
|
// Overlapping specifies the query to be used to return intervals that overlap
|
|
// with an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) Overlapping(overlapping IntervalQueryRule) *IntervalQueryFilter {
|
|
r.overlapping = overlapping
|
|
return r
|
|
}
|
|
|
|
// NotContainedBy specifies the query to be used to return intervals that are NOT
|
|
// contained by an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) NotContainedBy(notContainedBy IntervalQueryRule) *IntervalQueryFilter {
|
|
r.notContainedBy = notContainedBy
|
|
return r
|
|
}
|
|
|
|
// NotContaining specifies the query to be used to return intervals that do NOT
|
|
// contain an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) NotContaining(notContaining IntervalQueryRule) *IntervalQueryFilter {
|
|
r.notContaining = notContaining
|
|
return r
|
|
}
|
|
|
|
// NotOverlapping specifies the query to be used to return intervals that do NOT
|
|
// overlap with an interval from the filter rule.
|
|
func (r *IntervalQueryFilter) NotOverlapping(notOverlapping IntervalQueryRule) *IntervalQueryFilter {
|
|
r.notOverlapping = notOverlapping
|
|
return r
|
|
}
|
|
|
|
// Script allows a script to be used to return matching documents. The script
|
|
// must return a boolean value, true or false.
|
|
func (r *IntervalQueryFilter) Script(script *Script) *IntervalQueryFilter {
|
|
r.script = script
|
|
return r
|
|
}
|
|
|
|
// Source returns JSON for the function score query.
|
|
func (r *IntervalQueryFilter) Source() (interface{}, error) {
|
|
source := make(map[string]interface{})
|
|
|
|
if r.before != nil {
|
|
src, err := r.before.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["before"] = src
|
|
}
|
|
|
|
if r.after != nil {
|
|
src, err := r.after.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["after"] = src
|
|
}
|
|
|
|
if r.containedBy != nil {
|
|
src, err := r.containedBy.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["contained_by"] = src
|
|
}
|
|
|
|
if r.containing != nil {
|
|
src, err := r.containing.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["containing"] = src
|
|
}
|
|
|
|
if r.overlapping != nil {
|
|
src, err := r.overlapping.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["overlapping"] = src
|
|
}
|
|
|
|
if r.notContainedBy != nil {
|
|
src, err := r.notContainedBy.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["not_contained_by"] = src
|
|
}
|
|
|
|
if r.notContaining != nil {
|
|
src, err := r.notContaining.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["not_containing"] = src
|
|
}
|
|
|
|
if r.notOverlapping != nil {
|
|
src, err := r.notOverlapping.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["not_overlapping"] = src
|
|
}
|
|
|
|
if r.script != nil {
|
|
src, err := r.script.Source()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
source["script"] = src
|
|
}
|
|
|
|
return source, nil
|
|
}
|
|
|
|
// isIntervalQueryRule implements the marker interface.
|
|
func (r *IntervalQueryFilter) isIntervalQueryRule() bool {
|
|
return true
|
|
}
|