Package openSearchQuery provides a query builder for OpenSearch.
Usage example:
q := openSearchQuery.NewBoolQueryBuilder(&openSearchQuery.QuerySettings{ /* ... */ })
if err := q.AddFilterRequest(filterRequest); err != nil {
return nil, err
}
request, err := esquery.Search().
Query(q.Build()).
MarshalJSON()
if err != nil {
return nil, err
}
responseBody, err := v.openSearchClient.Search(openSearchModels.VulnerabilityIndexName, request)
if err != nil {
return nil, err
}import "github.com/greenbone/opensight-golang-libraries/pkg/openSearch/openSearchQuery"Package openSearchQuery provides a query builder for OpenSearch.
- func AddBucketSortAgg(aggs []esquery.Aggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField, pagingRequest *paging.Request) ([]esquery.Aggregation, error)
- func AddMaxAggForSorting(aggs []esquery.Aggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField) ([]esquery.Aggregation, error)
- func AddOrder(aggregation *esquery.TermsAggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField) (*esquery.TermsAggregation, error)
- func BucketSortAgg(sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField, pagingRequest *paging.Request) (*esquery.CustomAggMap, error)
- func HandleCompareOperatorBeginsWith(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorBetweenDates(fieldName string, _ []string, fieldValue any, _ *QuerySettings) esquery.Mappable
- func HandleCompareOperatorContains(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorExists(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsGreaterThan(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsGreaterThanOrEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsGreaterThanOrEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsGreaterThanRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsKeywordEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsLessThan(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsLessThanOrEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsLessThanOrEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsLessThanRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorIsNotEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorNotBeginsWith(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappable
- func HandleCompareOperatorTextContains(fieldName string, _ []string, fieldValue any, _ *QuerySettings) esquery.Mappable
- func ValueToString(value interface{}) string
- type BoolQueryBuilder
- func NewBoolQueryBuilder(querySettings *QuerySettings) *BoolQueryBuilder
- func NewBoolQueryBuilderWith(query *esquery.BoolQuery, querySettings *QuerySettings) *BoolQueryBuilder
- func (q *BoolQueryBuilder) AddCompareOperators(operators ...CompareOperator) *BoolQueryBuilder
- func (q *BoolQueryBuilder) AddFilterRequest(request *filter.Request) error
- func (q *BoolQueryBuilder) AddTermFilter(fieldName string, value interface{}) *BoolQueryBuilder
- func (q *BoolQueryBuilder) AddTermsFilter(fieldName string, values ...interface{}) *BoolQueryBuilder
- func (q *BoolQueryBuilder) Build() *esquery.BoolQuery
- func (q *BoolQueryBuilder) ReplaceCompareOperators(operators []CompareOperator) *BoolQueryBuilder
- type CompareOperator
- type CompareOperatorHandler
- type EffectiveSortField
- type NestedQueryFieldDefinition
- type QuerySettings
- type RatingRange
func AddBucketSortAgg(aggs []esquery.Aggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField, pagingRequest *paging.Request) ([]esquery.Aggregation, error)func AddMaxAggForSorting(aggs []esquery.Aggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField) ([]esquery.Aggregation, error)func AddOrder(aggregation *esquery.TermsAggregation, sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField) (*esquery.TermsAggregation, error)func BucketSortAgg(sortingRequest *sorting.Request, sortFieldMapping map[string]EffectiveSortField, pagingRequest *paging.Request) (*esquery.CustomAggMap, error)BucketSortAgg is capable to sort all existing buckets, but is currently only used for paging
func HandleCompareOperatorBeginsWith(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorBeginsWith handles begins with
func HandleCompareOperatorBetweenDates(fieldName string, _ []string, fieldValue any, _ *QuerySettings) esquery.MappableHandleCompareOperatorBetweenDates constructs an OpenSearch range query for a given date field. It accepts a field name and a field value, which must be either: - A slice of two time.Time values ([]time.Time), representing the start and end of the range, or - A slice of two RFC3339Nano-formatted strings ([]string), which are parsed into time.Time, representing the start and end of the range.
The generated range query is inclusive of both the lower and upper bounds. If a document’s timestamp is exactly equal to the start or end date, it will still match the query.
If the slice length is not exactly 2, or if the string values cannot be parsed into valid dates, the function logs an error and returns an empty query (MatchNone).
func HandleCompareOperatorContains(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorContains handles contains. In the index mapping the given field must be a string of type `keyword`.
func HandleCompareOperatorExists(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsEqualTo handles is equal to
func HandleCompareOperatorIsEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsGreaterThan(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsGreaterThan handles is greater than
func HandleCompareOperatorIsGreaterThanOrEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsGreaterThanOrEqualTo handles is greater than or equal to
func HandleCompareOperatorIsGreaterThanOrEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsGreaterThanRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsKeywordEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsKeywordEqualTo handles is keyword field equal to
func HandleCompareOperatorIsLessThan(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsLessThan handles is less than
func HandleCompareOperatorIsLessThanOrEqualTo(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorIsLessThanOrEqualTo handles is less than or equal to
func HandleCompareOperatorIsLessThanOrEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsLessThanRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorIsNotEqualToRating(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.Mappablefunc HandleCompareOperatorNotBeginsWith(fieldName string, fieldKeys []string, fieldValue any, querySettings *QuerySettings) esquery.MappableHandleCompareOperatorNotBeginsWith handles not begins with
func HandleCompareOperatorTextContains(fieldName string, _ []string, fieldValue any, _ *QuerySettings) esquery.MappableHandleCompareOperatorTextContains performs a full text search on the given field. In the index mapping it must be a string of type `text`.
func ValueToString(value interface{}) stringValueToString converts the given value to a string. Compared to fmt.Sprint it will give RFC3339 format for time.Time value and a specific formatting of numbers.
BoolQueryBuilder is a builder for an OpenSearch bool query. Use NewBoolQueryBuilder or NewBoolQueryBuilderWith for proper initialization.
type BoolQueryBuilder struct {
Must []esquery.Mappable
MustNot []esquery.Mappable
// contains filtered or unexported fields
}func NewBoolQueryBuilder(querySettings *QuerySettings) *BoolQueryBuilderNewBoolQueryBuilder creates a new BoolQueryBuilder and returns it. It uses the default set of CompareOperator.
querySettings is used to configure the query builder.
func NewBoolQueryBuilderWith(query *esquery.BoolQuery, querySettings *QuerySettings) *BoolQueryBuilderNewBoolQueryBuilderWith creates a new BoolQueryBuilder and returns it. It uses the default set of CompareOperator.
query is the initial bool query to use. querySettings is used to configure the query builder.
func (q *BoolQueryBuilder) AddCompareOperators(operators ...CompareOperator) *BoolQueryBuilderAddCompareOperators adds the given set of CompareOperator to the set of CompareOperator to be used for this query builder.
operators is the set of CompareOperator to add.
func (q *BoolQueryBuilder) AddFilterRequest(request *filter.Request) errorAddFilterRequest adds a filter request to this query. The filter request is translated into a bool query.
func (q *BoolQueryBuilder) AddTermFilter(fieldName string, value interface{}) *BoolQueryBuilderAddTermFilter adds a term filter to this query.
value is the value to filter for.
func (q *BoolQueryBuilder) AddTermsFilter(fieldName string, values ...interface{}) *BoolQueryBuilderAddTermsFilter adds a terms filter to this query.
values is the list of values to filter for.
func (q *BoolQueryBuilder) Build() *esquery.BoolQueryBuild returns the built query.
func (q *BoolQueryBuilder) ReplaceCompareOperators(operators []CompareOperator) *BoolQueryBuilderReplaceCompareOperators replaces the set of CompareOperator to be used for this query builder.
operators is the new set of CompareOperator to use.
CompareOperator defines a mapping between a filter.CompareOperator and a function to generate an appropriate query condition in from of a CompareOperatorHandler.
type CompareOperator struct {
Operator filter.CompareOperator
Handler CompareOperatorHandler
// MustCondition defines whether the condition should be added to the must (true) or must_not clause (false).
MustCondition bool
}CompareOperatorHandler is a function that generates an appropriate query condition for the given field.
fieldName is the name of the field. fieldKeys is a list of keys used only for nested fields. fieldValue is the value to compare against. querySettings are the settings to use for the query defining which fields are to be treated e.g. as wildcard array or keyword field.
type CompareOperatorHandler func(fieldName string, fieldKeys []string, fieldValue any,
querySettings *QuerySettings) esquery.Mappabletype EffectiveSortField struct {
PlainField *string
AggregationName *string
AggregationValue string
}NestedQueryFieldDefinition is a definition of a nested query field.
type NestedQueryFieldDefinition struct {
// FieldName is the name of the field.
FieldName string
// FieldKeyName is the name of the key field.
FieldKeyName string
// FieldValueName is the name of the value field.
FieldValueName string
}QuerySettings is used to configure the query builder.
type QuerySettings struct {
// WildcardArrays is a map of field names to a boolean value indicating whether the field is to be treated as a wildcard array.
WildcardArrays map[string]bool
// IsEqualToKeywordFields is a map of field names to a boolean value indicating whether the field is to be treated as a keyword field.
IsEqualToKeywordFields map[string]bool
// UseNestedMatchQueryFields is a map of field names to a boolean value indicating whether the field is to be treated as a nested query field.
UseNestedMatchQueryFields map[string]bool
// NestedQueryFieldDefinitions is a list of nested query field definitions.
NestedQueryFieldDefinitions []NestedQueryFieldDefinition
// UseMatchPhraseFields is a map of field names to a boolean value indicating whether the field should use a match phrase query.
UseMatchPhrase map[string]bool
FilterFieldMapping map[string]string
// StringFieldRating is a map for field names with a rating. The rating is used to determine the compare order of the field in the query.
StringFieldRating map[string]map[string]RatingRange
}RatingRange represent a closed interval of float32 values.
type RatingRange struct {
Min float32 // Lower bound of the rating range (inclusive)
Max float32 // Upper bound of the rating range (inclusive)
}Generated by gomarkdoc
Copyright (C) 2022-2023 [Greenbone AG][Greenbone AG]
Licensed under the GNU General Public License v3.0 or later.