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"`
}
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 search
// 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 search 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 search 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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
// {
// "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
Jan Semmelink
committed
// {
// "_index": "go-utils-search-docs-test",
// "_type": "_doc",
// "_id": "836c6443-5b0e-489b-aa0f-712ebed96841",
// "_version": 1,
// "_seq_no": 6,
// "_primary_term": 1,
// "found": true,
// "_source": { ... }
// }
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