8
8
9
9
package org .opensearch .action .search ;
10
10
11
- import org .opensearch .index .query .BoolQueryBuilder ;
12
- import org .opensearch .index .query .BoostingQueryBuilder ;
13
- import org .opensearch .index .query .ConstantScoreQueryBuilder ;
14
- import org .opensearch .index .query .DisMaxQueryBuilder ;
15
- import org .opensearch .index .query .DistanceFeatureQueryBuilder ;
16
- import org .opensearch .index .query .ExistsQueryBuilder ;
17
- import org .opensearch .index .query .FieldMaskingSpanQueryBuilder ;
18
- import org .opensearch .index .query .FuzzyQueryBuilder ;
19
- import org .opensearch .index .query .GeoBoundingBoxQueryBuilder ;
20
- import org .opensearch .index .query .GeoDistanceQueryBuilder ;
21
- import org .opensearch .index .query .GeoPolygonQueryBuilder ;
22
- import org .opensearch .index .query .GeoShapeQueryBuilder ;
23
- import org .opensearch .index .query .IntervalQueryBuilder ;
24
- import org .opensearch .index .query .MatchAllQueryBuilder ;
25
- import org .opensearch .index .query .MatchPhraseQueryBuilder ;
26
- import org .opensearch .index .query .MatchQueryBuilder ;
27
- import org .opensearch .index .query .MultiMatchQueryBuilder ;
28
- import org .opensearch .index .query .PrefixQueryBuilder ;
29
11
import org .opensearch .index .query .QueryBuilder ;
30
- import org .opensearch .index .query .QueryStringQueryBuilder ;
31
- import org .opensearch .index .query .RangeQueryBuilder ;
32
- import org .opensearch .index .query .RegexpQueryBuilder ;
33
- import org .opensearch .index .query .ScriptQueryBuilder ;
34
- import org .opensearch .index .query .SimpleQueryStringBuilder ;
35
- import org .opensearch .index .query .TermQueryBuilder ;
36
- import org .opensearch .index .query .WildcardQueryBuilder ;
37
- import org .opensearch .index .query .functionscore .FunctionScoreQueryBuilder ;
38
12
import org .opensearch .telemetry .metrics .Counter ;
39
13
import org .opensearch .telemetry .metrics .MetricsRegistry ;
40
14
import org .opensearch .telemetry .metrics .tags .Tags ;
41
15
42
16
import java .util .HashMap ;
43
17
import java .util .Map ;
18
+ import java .util .concurrent .ConcurrentHashMap ;
44
19
45
20
/**
46
21
* Class contains all the Counters related to search query types.
@@ -49,244 +24,47 @@ final class SearchQueryCounters {
49
24
private static final String LEVEL_TAG = "level" ;
50
25
private static final String UNIT = "1" ;
51
26
private final MetricsRegistry metricsRegistry ;
52
-
53
- // Counters related to Query types
54
27
public final Counter aggCounter ;
55
- public final Counter boolCounter ;
56
- public final Counter boostingCounter ;
57
- public final Counter constantScoreCounter ;
58
- public final Counter disMaxCounter ;
59
- public final Counter distanceFeatureCounter ;
60
- public final Counter existsCounter ;
61
- public final Counter fieldMaskingSpanCounter ;
62
- public final Counter functionScoreCounter ;
63
- public final Counter fuzzyCounter ;
64
- public final Counter geoBoundingBoxCounter ;
65
- public final Counter geoDistanceCounter ;
66
- public final Counter geoPolygonCounter ;
67
- public final Counter geoShapeCounter ;
68
- public final Counter intervalCounter ;
69
- public final Counter matchCounter ;
70
- public final Counter matchallCounter ;
71
- public final Counter matchPhrasePrefixCounter ;
72
- public final Counter multiMatchCounter ;
73
28
public final Counter otherQueryCounter ;
74
- public final Counter prefixCounter ;
75
- public final Counter queryStringCounter ;
76
- public final Counter rangeCounter ;
77
- public final Counter regexpCounter ;
78
- public final Counter scriptCounter ;
79
- public final Counter simpleQueryStringCounter ;
80
29
public final Counter sortCounter ;
81
- public final Counter skippedCounter ;
82
- public final Counter termCounter ;
83
- public final Counter totalCounter ;
84
- public final Counter wildcardCounter ;
85
- public final Counter numberOfInputFieldsCounter ;
86
30
private final Map <Class <? extends QueryBuilder >, Counter > queryHandlers ;
31
+ public final ConcurrentHashMap <String , Counter > nameToQueryTypeCounters ;
87
32
88
33
public SearchQueryCounters (MetricsRegistry metricsRegistry ) {
89
34
this .metricsRegistry = metricsRegistry ;
35
+ this .nameToQueryTypeCounters = new ConcurrentHashMap <>();
90
36
this .aggCounter = metricsRegistry .createCounter (
91
37
"search.query.type.agg.count" ,
92
38
"Counter for the number of top level agg search queries" ,
93
39
UNIT
94
40
);
95
- this .boolCounter = metricsRegistry .createCounter (
96
- "search.query.type.bool.count" ,
97
- "Counter for the number of top level and nested bool search queries" ,
98
- UNIT
99
- );
100
- this .boostingCounter = metricsRegistry .createCounter (
101
- "search.query.type.boost.count" ,
102
- "Counter for the number of top level and nested boost search queries" ,
103
- UNIT
104
- );
105
- this .constantScoreCounter = metricsRegistry .createCounter (
106
- "search.query.type.counstantscore.count" ,
107
- "Counter for the number of top level and nested constant score search queries" ,
108
- UNIT
109
- );
110
- this .disMaxCounter = metricsRegistry .createCounter (
111
- "search.query.type.dismax.count" ,
112
- "Counter for the number of top level and nested disjuntion max search queries" ,
113
- UNIT
114
- );
115
- this .distanceFeatureCounter = metricsRegistry .createCounter (
116
- "search.query.type.distancefeature.count" ,
117
- "Counter for the number of top level and nested distance feature search queries" ,
118
- UNIT
119
- );
120
- this .existsCounter = metricsRegistry .createCounter (
121
- "search.query.type.exists.count" ,
122
- "Counter for the number of top level and nested exists search queries" ,
123
- UNIT
124
- );
125
- this .fieldMaskingSpanCounter = metricsRegistry .createCounter (
126
- "search.query.type.fieldmaskingspan.count" ,
127
- "Counter for the number of top level and nested field masking span search queries" ,
128
- UNIT
129
- );
130
- this .functionScoreCounter = metricsRegistry .createCounter (
131
- "search.query.type.functionscore.count" ,
132
- "Counter for the number of top level and nested function score search queries" ,
133
- UNIT
134
- );
135
- this .fuzzyCounter = metricsRegistry .createCounter (
136
- "search.query.type.fuzzy.count" ,
137
- "Counter for the number of top level and nested fuzzy search queries" ,
138
- UNIT
139
- );
140
- this .geoBoundingBoxCounter = metricsRegistry .createCounter (
141
- "search.query.type.geoboundingbox.count" ,
142
- "Counter for the number of top level and nested geo bounding box queries" ,
143
- UNIT
144
- );
145
- this .geoDistanceCounter = metricsRegistry .createCounter (
146
- "search.query.type.geodistance.count" ,
147
- "Counter for the number of top level and nested geo distance queries" ,
148
- UNIT
149
- );
150
- this .geoPolygonCounter = metricsRegistry .createCounter (
151
- "search.query.type.geopolygon.count" ,
152
- "Counter for the number of top level and nested geo polygon queries" ,
153
- UNIT
154
- );
155
- this .geoShapeCounter = metricsRegistry .createCounter (
156
- "search.query.type.geoshape.count" ,
157
- "Counter for the number of top level and nested geo shape queries" ,
158
- UNIT
159
- );
160
- this .intervalCounter = metricsRegistry .createCounter (
161
- "search.query.type.interval.count" ,
162
- "Counter for the number of top level and nested interval queries" ,
163
- UNIT
164
- );
165
- this .matchCounter = metricsRegistry .createCounter (
166
- "search.query.type.match.count" ,
167
- "Counter for the number of top level and nested match search queries" ,
168
- UNIT
169
- );
170
- this .matchallCounter = metricsRegistry .createCounter (
171
- "search.query.type.matchall.count" ,
172
- "Counter for the number of top level and nested match all search queries" ,
173
- UNIT
174
- );
175
- this .matchPhrasePrefixCounter = metricsRegistry .createCounter (
176
- "search.query.type.matchphrase.count" ,
177
- "Counter for the number of top level and nested match phrase prefix search queries" ,
178
- UNIT
179
- );
180
- this .multiMatchCounter = metricsRegistry .createCounter (
181
- "search.query.type.multimatch.count" ,
182
- "Counter for the number of top level and nested multi match search queries" ,
183
- UNIT
184
- );
185
41
this .otherQueryCounter = metricsRegistry .createCounter (
186
42
"search.query.type.other.count" ,
187
43
"Counter for the number of top level and nested search queries that do not match any other categories" ,
188
44
UNIT
189
45
);
190
- this .prefixCounter = metricsRegistry .createCounter (
191
- "search.query.type.prefix.count" ,
192
- "Counter for the number of top level and nested search queries that match prefix queries" ,
193
- UNIT
194
- );
195
- this .queryStringCounter = metricsRegistry .createCounter (
196
- "search.query.type.querystringquery.count" ,
197
- "Counter for the number of top level and nested queryStringQuery search queries" ,
198
- UNIT
199
- );
200
- this .rangeCounter = metricsRegistry .createCounter (
201
- "search.query.type.range.count" ,
202
- "Counter for the number of top level and nested range search queries" ,
203
- UNIT
204
- );
205
- this .regexpCounter = metricsRegistry .createCounter (
206
- "search.query.type.regex.count" ,
207
- "Counter for the number of top level and nested regex search queries" ,
208
- UNIT
209
- );
210
- this .scriptCounter = metricsRegistry .createCounter (
211
- "search.query.type.script.count" ,
212
- "Counter for the number of top level and nested script search queries" ,
213
- UNIT
214
- );
215
- this .simpleQueryStringCounter = metricsRegistry .createCounter (
216
- "search.query.type.simplequerystring.count" ,
217
- "Counter for the number of top level and nested script simple query string search queries" ,
218
- UNIT
219
- );
220
- this .skippedCounter = metricsRegistry .createCounter (
221
- "search.query.type.skipped.count" ,
222
- "Counter for the number queries skipped due to error" ,
223
- UNIT
224
- );
225
46
this .sortCounter = metricsRegistry .createCounter (
226
47
"search.query.type.sort.count" ,
227
48
"Counter for the number of top level sort search queries" ,
228
49
UNIT
229
50
);
230
- this .termCounter = metricsRegistry .createCounter (
231
- "search.query.type.term.count" ,
232
- "Counter for the number of top level and nested term search queries" ,
233
- UNIT
234
- );
235
- this .totalCounter = metricsRegistry .createCounter (
236
- "search.query.type.total.count" ,
237
- "Counter for the number of top level and nested search queries" ,
238
- UNIT
239
- );
240
- this .wildcardCounter = metricsRegistry .createCounter (
241
- "search.query.type.wildcard.count" ,
242
- "Counter for the number of top level and nested wildcard search queries" ,
243
- UNIT
244
- );
245
- this .numberOfInputFieldsCounter = metricsRegistry .createCounter (
246
- "search.query.type.numberofinputfields.count" ,
247
- "Counter for the number of input fields in the search queries" ,
248
- UNIT
249
- );
250
51
this .queryHandlers = new HashMap <>();
251
- initializeQueryHandlers ();
52
+
252
53
}
253
54
254
55
public void incrementCounter (QueryBuilder queryBuilder , int level ) {
255
- Counter counter = queryHandlers .get (queryBuilder .getClass ());
256
- if (counter != null ) {
257
- counter .add (1 , Tags .create ().addTag (LEVEL_TAG , level ));
258
- } else {
259
- otherQueryCounter .add (1 , Tags .create ().addTag (LEVEL_TAG , level ));
260
- }
261
- }
56
+ String uniqueQueryCounterName = queryBuilder .getName ();
262
57
263
- private void initializeQueryHandlers () {
58
+ Counter counter = nameToQueryTypeCounters .computeIfAbsent (uniqueQueryCounterName , k -> createQueryCounter (k ));
59
+ counter .add (1 , Tags .create ().addTag (LEVEL_TAG , level ));
60
+ }
264
61
265
- queryHandlers .put (BoolQueryBuilder .class , boolCounter );
266
- queryHandlers .put (FunctionScoreQueryBuilder .class , functionScoreCounter );
267
- queryHandlers .put (MatchQueryBuilder .class , matchCounter );
268
- queryHandlers .put (MatchPhraseQueryBuilder .class , matchPhrasePrefixCounter );
269
- queryHandlers .put (MultiMatchQueryBuilder .class , multiMatchCounter );
270
- queryHandlers .put (QueryStringQueryBuilder .class , queryStringCounter );
271
- queryHandlers .put (RangeQueryBuilder .class , rangeCounter );
272
- queryHandlers .put (RegexpQueryBuilder .class , regexpCounter );
273
- queryHandlers .put (TermQueryBuilder .class , termCounter );
274
- queryHandlers .put (WildcardQueryBuilder .class , wildcardCounter );
275
- queryHandlers .put (BoostingQueryBuilder .class , boostingCounter );
276
- queryHandlers .put (ConstantScoreQueryBuilder .class , constantScoreCounter );
277
- queryHandlers .put (DisMaxQueryBuilder .class , disMaxCounter );
278
- queryHandlers .put (DistanceFeatureQueryBuilder .class , distanceFeatureCounter );
279
- queryHandlers .put (ExistsQueryBuilder .class , existsCounter );
280
- queryHandlers .put (FieldMaskingSpanQueryBuilder .class , fieldMaskingSpanCounter );
281
- queryHandlers .put (FuzzyQueryBuilder .class , fuzzyCounter );
282
- queryHandlers .put (GeoBoundingBoxQueryBuilder .class , geoBoundingBoxCounter );
283
- queryHandlers .put (GeoDistanceQueryBuilder .class , geoDistanceCounter );
284
- queryHandlers .put (GeoPolygonQueryBuilder .class , geoPolygonCounter );
285
- queryHandlers .put (GeoShapeQueryBuilder .class , geoShapeCounter );
286
- queryHandlers .put (IntervalQueryBuilder .class , intervalCounter );
287
- queryHandlers .put (MatchAllQueryBuilder .class , matchallCounter );
288
- queryHandlers .put (PrefixQueryBuilder .class , prefixCounter );
289
- queryHandlers .put (ScriptQueryBuilder .class , scriptCounter );
290
- queryHandlers .put (SimpleQueryStringBuilder .class , simpleQueryStringCounter );
62
+ private Counter createQueryCounter (String counterName ) {
63
+ Counter counter = metricsRegistry .createCounter (
64
+ "search.query.type." + counterName + ".count" ,
65
+ "Counter for the number of top level and nested " + counterName + " search queries" ,
66
+ UNIT
67
+ );
68
+ return counter ;
291
69
}
292
70
}
0 commit comments