Newer
Older
// Mapping configures an index in OpenSearch
type Settings struct {
Index *SettingsIndex `json:"index,omitempty"`
}
type SettingsIndex struct {
NumberOfShards int `json:"number_of_shards,omitempty"`
NumberOfReplicas int `json:"number_of_replicas,omitempty"`
Mapping *Mapping `json:"mapping,omitempty"`
}
type Mapping struct {
TotalFields TotalFields `json:"total_fields,omitempty"`
}
type TotalFields struct {
Limit int `json:"limit,omitempty"`
}
type Mappings struct {
Properties map[string]MappingProperty `json:"properties,omitempty"`
}
type MappingProperty struct {
Type string `json:"type,omitempty"` // empty for sub-structs described with properties
Enabled bool `json:"enabled,omitempty"`
Fields map[string]MappingFieldProperties `json:"fields,omitempty"`
Properties map[string]MappingProperty `json:"properties,omitempty"`
}
type MappingFieldProperties struct {
Keyword *MappingKeyword `json:"keyword"`
}
type MappingKeyword struct {
Type string `json:"type"` // ="keyword"
IgnoreAbove int `json:"ignore_above"` // e.g. 256
type SearchRequestBody struct {
Sort []map[string]string `json:"sort,omitempty"` // order and order_by
Size int64 `json:"size,omitempty"` // limit
From int64 `json:"from,omitempty"` // offset
Query Query `json:"query"`
Timeout string `json:"timeout,omitempty"` // timeout for opensearch
// https://opensearch.org/docs/latest/opensearch/query-dsl/bool/
Match *QueryMatch `json:"match,omitempty" doc:"<field>:<value>"`
Term *QueryTerm `json:"term,omitempty"`
Range *QueryRange `json:"range,omitempty"`
MultiMatch *QueryMultiMatch `json:"multi_match,omitempty"`
Bool *QueryBool `json:"bool,omitempty"`
QueryString *QueryString `json:"query_string,omitempty"`
SimpleQueryString *QueryString `json:"simple_query_string,omitempty"`
Must []FilterQuery `json:"must,omitempty"` // List of things that must appear in matching documents and will contribute to the score.
Filter []FilterQuery `json:"filter,omitempty"` // List of things that must appear in matching documents. However, unlike must the score of the query will be ignored. Filter clauses are executed in filter context, meaning that scoring is ignored and clauses are considered for caching
Should []Query `json:"should,omitempty"` // List of things that should appear in the matching document.
MustNot []FilterQuery `json:"must_not,omitempty"` // List of things that must not appear in the matching documents. Clauses are executed in filter context meaning that scoring is ignored and clauses are considered for caching. Because scoring is ignored, a score of 0 for all documents is returned
MinimumShouldMatch int64 `json:"minimum_should_match"`
}
type FilterQuery struct {
// one of:
Match *QueryMatch `json:"match,omitempty"`
Term *QueryTerm `json:"term,omitempty"`
Range *QueryRange `json:"range,omitempty"`
MultiMatch *QueryMultiMatch `json:"multi_match,omitempty"`
Bool *QueryBool `json:"bool,omitempty"`
QueryString *QueryString `json:"query_string,omitempty"`
SimpleQueryString *QueryString `json:"simple_query_string,omitempty"`
Wildcard *QueryWildcard `json:"wildcard,omitempty"` // https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-wildcard-query.html
}
type QueryValue struct {
Query string `json:"query"`
Operator string `json:"operator,omitempty"` // defaults to "or", accepted values: or|and
Fuzziness string `json:"fuzziness,omitempty"` // https://www.elastic.co/guide/en/elasticsearch/reference/current/common-options.html#fuzziness
ZeroTermsQuery string `json:"zero_terms_query,omitempty"`
Query string `json:"query"` // Full value match opensearch in selected fields
Fields []string `json:"fields,omitempty" doc:"List of fields"`
Type QueryMultiMatchType `json:"type,omitempty"`
Operator string `json:"operator,omitempty"`
QueryMultiMatchTypePhrase QueryMultiMatchType = "phrase"
QueryMultiMatchTypeCrossFields QueryMultiMatchType = "cross_fields"
Query string `json:"query"` // Text opensearch with partial matches, using asterisk for optional or question mark for required wildcards before and/or after text
Fields []string `json:"fields,omitempty" doc:"List of fields"`
DefaultOperator string `json:"default_operator,omitempty"`
}
type QueryRange map[string]QueryExpr
// {
// "took":872,
// "timed_out":false,
// "_shards":{
// "total":38,
// "successful":38,
// "skipped":0,
// "failed":0
// },
// "hits":{
// "total":{
// "value":0,
// "relation":"eq"
// },
// "max_score":null,
// "hits":[
// {
// "_index": "go-utils-audit-test-20211030",
// "_type": "_doc",
// "_id": "Tj9l5XwBWRiAneoYazic",
// "_score": 1.2039728,
// "_source": {
// "@timestamp": "2021-10-30T15:03:20.679481+02:00",
// "@end_time": "2021-10-30T15:03:20.469481+02:00",
// "@duration_ms": -210,
// "test1": "6",
// "test2": "ACC_00098",
// "test3": 10,
// "http": {
// "method": "GET",
// "path": "/accounts"
// },
// "http_method": "GET",
// "http_path": "/accounts"
// }
// },
// ]
// }
// }
type SearchResponseBody struct {
Took int `json:"took"` // milliseconds
TimedOut bool `json:"timed_out"`
Shards SearchResponseShards `json:"_shards"`
Hits SearchResponseHits `json:"hits"`
}
type SearchResponseShards struct {
Total int `json:"total"`
Successful int `json:"successful"`
Skipped int `json:"skipped"`
Failed int `json:"failed"`
}
type SearchResponseHits struct {
Total SearchResponseHitsTotal `json:"total"`
MaxScore *float64 `json:"max_score,omitempty"`
Hits []HitDoc `json:"hits"`
}
type SearchResponseHitsTotal struct {
Value int `json:"value"` // e.g. 0 when no docs matched
Relation string `json:"relation"` // e.g. "eq"
}
type HitDoc struct {
Index string `json:"_index"` // name of index
Type string `json:"_type"` // _doc
ID string `json:"_id"`
Score float64 `json:"_score"` //
Source map[string]interface{} `json:"_source"` // the document of itemType
Jan Semmelink
committed
//
// {
// "_index": "go-utils-opensearch-docs-test",
// "_type": "_doc",
// "_id": "836c6443-5b0e-489b-aa0f-712ebed96841",
// "_version": 1,
// "_seq_no": 6,
// "_primary_term": 1,
// "found": true,
// "_source": { ... }
// }
Jan Semmelink
committed
type GetResponseBody struct {
Index string `json:"_index"` // name of index
Type string `json:"_type"` // _doc
Jan Semmelink
committed
ID string `json:"_id"`
Version int `json:"_version"`
SeqNo int `json:"_seq_no"`
PrimaryTerm int `json:"_primary_term"`
Found bool `json:"found"`
Source map[string]interface{} `json:"_source"` // the document of itemType