113 lines
2.5 KiB
Go
113 lines
2.5 KiB
Go
package es
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// QueryBuilder represents a query builder
|
|
type QueryBuilder struct {
|
|
boolQueryBuilder *BoolQueryBuilder
|
|
}
|
|
|
|
// NewQueryBuilder create a new query builder
|
|
func NewQueryBuilder() *QueryBuilder {
|
|
return &QueryBuilder{}
|
|
}
|
|
|
|
// Build builds and return a query builder
|
|
func (b *QueryBuilder) Build() (*Query, error) {
|
|
q := Query{}
|
|
|
|
if b.boolQueryBuilder != nil {
|
|
b, err := b.boolQueryBuilder.Build()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
q.Bool = b
|
|
}
|
|
|
|
return &q, nil
|
|
}
|
|
|
|
// Bool creates and return a query builder
|
|
func (b *QueryBuilder) Bool() *BoolQueryBuilder {
|
|
if b.boolQueryBuilder == nil {
|
|
b.boolQueryBuilder = NewBoolQueryBuilder()
|
|
}
|
|
return b.boolQueryBuilder
|
|
}
|
|
|
|
// BoolQueryBuilder represents a bool query builder
|
|
type BoolQueryBuilder struct {
|
|
filterQueryBuilder *FilterQueryBuilder
|
|
}
|
|
|
|
// NewBoolQueryBuilder create a new bool query builder
|
|
func NewBoolQueryBuilder() *BoolQueryBuilder {
|
|
return &BoolQueryBuilder{}
|
|
}
|
|
|
|
// Filter creates and return a filter query builder
|
|
func (b *BoolQueryBuilder) Filter() *FilterQueryBuilder {
|
|
if b.filterQueryBuilder == nil {
|
|
b.filterQueryBuilder = NewFilterQueryBuilder()
|
|
}
|
|
return b.filterQueryBuilder
|
|
}
|
|
|
|
// Build builds and return a bool query builder
|
|
func (b *BoolQueryBuilder) Build() (*BoolQuery, error) {
|
|
boolQuery := BoolQuery{}
|
|
|
|
if b.filterQueryBuilder != nil {
|
|
filters, err := b.filterQueryBuilder.Build()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
boolQuery.Filters = filters
|
|
}
|
|
|
|
return &boolQuery, nil
|
|
}
|
|
|
|
// FilterQueryBuilder represents a filter query builder
|
|
type FilterQueryBuilder struct {
|
|
filters []Filter
|
|
}
|
|
|
|
// NewFilterQueryBuilder creates a new filter query builder
|
|
func NewFilterQueryBuilder() *FilterQueryBuilder {
|
|
return &FilterQueryBuilder{
|
|
filters: make([]Filter, 0),
|
|
}
|
|
}
|
|
|
|
// Build builds and return a filter query builder
|
|
func (b *FilterQueryBuilder) Build() ([]Filter, error) {
|
|
return b.filters, nil
|
|
}
|
|
|
|
// AddDateRangeFilter adds a new time range filter
|
|
func (b *FilterQueryBuilder) AddDateRangeFilter(timeField string, lte, gte int64, format string) *FilterQueryBuilder {
|
|
b.filters = append(b.filters, &RangeFilter{
|
|
Key: timeField,
|
|
Lte: lte,
|
|
Gte: gte,
|
|
Format: format,
|
|
})
|
|
return b
|
|
}
|
|
|
|
// AddQueryStringFilter adds a new query string filter
|
|
func (b *FilterQueryBuilder) AddQueryStringFilter(querystring string, analyseWildcard bool) *FilterQueryBuilder {
|
|
if len(strings.TrimSpace(querystring)) == 0 {
|
|
return b
|
|
}
|
|
|
|
b.filters = append(b.filters, &QueryStringFilter{
|
|
Query: querystring,
|
|
AnalyzeWildcard: analyseWildcard,
|
|
})
|
|
return b
|
|
}
|