12
12
import java .util .Collection ;
13
13
import java .util .Collections ;
14
14
import java .util .List ;
15
- import java .util .Map ;
16
- import java .util .function .Function ;
17
15
import org .apache .lucene .util .BytesRef ;
18
16
import org .opensearch .common .hash .MurmurHash3 ;
19
17
import org .opensearch .core .common .io .stream .NamedWriteable ;
20
- import org .opensearch .index .query .AbstractGeometryQueryBuilder ;
21
- import org .opensearch .index .query .CommonTermsQueryBuilder ;
22
- import org .opensearch .index .query .ExistsQueryBuilder ;
23
- import org .opensearch .index .query .FieldMaskingSpanQueryBuilder ;
24
- import org .opensearch .index .query .FuzzyQueryBuilder ;
25
- import org .opensearch .index .query .GeoBoundingBoxQueryBuilder ;
26
- import org .opensearch .index .query .GeoDistanceQueryBuilder ;
27
- import org .opensearch .index .query .GeoPolygonQueryBuilder ;
28
- import org .opensearch .index .query .MatchBoolPrefixQueryBuilder ;
29
- import org .opensearch .index .query .MatchPhrasePrefixQueryBuilder ;
30
- import org .opensearch .index .query .MatchPhraseQueryBuilder ;
31
- import org .opensearch .index .query .MatchQueryBuilder ;
32
- import org .opensearch .index .query .MultiTermQueryBuilder ;
33
- import org .opensearch .index .query .PrefixQueryBuilder ;
34
18
import org .opensearch .index .query .QueryBuilder ;
35
- import org .opensearch .index .query .RangeQueryBuilder ;
36
- import org .opensearch .index .query .RegexpQueryBuilder ;
37
- import org .opensearch .index .query .SpanNearQueryBuilder ;
38
- import org .opensearch .index .query .SpanTermQueryBuilder ;
39
- import org .opensearch .index .query .TermQueryBuilder ;
40
- import org .opensearch .index .query .TermsQueryBuilder ;
41
- import org .opensearch .index .query .WildcardQueryBuilder ;
19
+ import org .opensearch .index .query .WithFieldName ;
42
20
import org .opensearch .search .aggregations .AggregationBuilder ;
43
21
import org .opensearch .search .aggregations .AggregatorFactories ;
44
22
import org .opensearch .search .aggregations .PipelineAggregationBuilder ;
45
- import org .opensearch .search .aggregations .bucket .histogram .AutoDateHistogramAggregationBuilder ;
46
- import org .opensearch .search .aggregations .bucket .histogram .DateHistogramAggregationBuilder ;
47
- import org .opensearch .search .aggregations .bucket .histogram .HistogramAggregationBuilder ;
48
- import org .opensearch .search .aggregations .bucket .histogram .VariableWidthHistogramAggregationBuilder ;
49
- import org .opensearch .search .aggregations .bucket .missing .MissingAggregationBuilder ;
50
- import org .opensearch .search .aggregations .bucket .range .AbstractRangeBuilder ;
51
- import org .opensearch .search .aggregations .bucket .range .GeoDistanceAggregationBuilder ;
52
- import org .opensearch .search .aggregations .bucket .range .IpRangeAggregationBuilder ;
53
- import org .opensearch .search .aggregations .bucket .sampler .DiversifiedAggregationBuilder ;
54
- import org .opensearch .search .aggregations .bucket .terms .RareTermsAggregationBuilder ;
55
- import org .opensearch .search .aggregations .bucket .terms .SignificantTermsAggregationBuilder ;
56
- import org .opensearch .search .aggregations .bucket .terms .TermsAggregationBuilder ;
57
- import org .opensearch .search .aggregations .metrics .AvgAggregationBuilder ;
58
- import org .opensearch .search .aggregations .metrics .CardinalityAggregationBuilder ;
59
- import org .opensearch .search .aggregations .metrics .ExtendedStatsAggregationBuilder ;
60
- import org .opensearch .search .aggregations .metrics .GeoCentroidAggregationBuilder ;
61
- import org .opensearch .search .aggregations .metrics .MaxAggregationBuilder ;
62
- import org .opensearch .search .aggregations .metrics .MinAggregationBuilder ;
63
- import org .opensearch .search .aggregations .metrics .StatsAggregationBuilder ;
64
- import org .opensearch .search .aggregations .metrics .SumAggregationBuilder ;
65
- import org .opensearch .search .aggregations .metrics .ValueCountAggregationBuilder ;
66
- import org .opensearch .search .aggregations .support .ValuesSourceAggregationBuilder ;
67
23
import org .opensearch .search .builder .SearchSourceBuilder ;
68
- import org .opensearch .search .sort .FieldSortBuilder ;
69
24
import org .opensearch .search .sort .SortBuilder ;
70
25
71
26
/**
74
29
public class QueryShapeGenerator {
75
30
static final String EMPTY_STRING = "" ;
76
31
static final String ONE_SPACE_INDENT = " " ;
77
- static final Map <Class <?>, List <Function <Object , String >>> QUERY_FIELD_DATA_MAP = FieldDataMapHelper .getQueryFieldDataMap ();
78
- static final Map <Class <?>, List <Function <Object , String >>> AGG_FIELD_DATA_MAP = FieldDataMapHelper .getAggFieldDataMap ();
79
- static final Map <Class <?>, List <Function <Object , String >>> SORT_FIELD_DATA_MAP = FieldDataMapHelper .getSortFieldDataMap ();
80
32
81
33
/**
82
34
* Method to get query shape hash code given a source
@@ -161,7 +113,7 @@ static StringBuilder recursiveAggregationShapeBuilder(
161
113
StringBuilder stringBuilder = new StringBuilder ();
162
114
stringBuilder .append (baseIndent ).append (ONE_SPACE_INDENT .repeat (2 )).append (aggBuilder .getType ());
163
115
if (showFields ) {
164
- stringBuilder .append (buildFieldDataString (AGG_FIELD_DATA_MAP . get ( aggBuilder . getClass ()), aggBuilder ));
116
+ stringBuilder .append (buildFieldDataString (aggBuilder ));
165
117
}
166
118
stringBuilder .append ("\n " );
167
119
@@ -227,7 +179,7 @@ static String buildSortShape(List<SortBuilder<?>> sortBuilderList, Boolean showF
227
179
StringBuilder stringBuilder = new StringBuilder ();
228
180
stringBuilder .append (ONE_SPACE_INDENT .repeat (2 )).append (sortBuilder .order ());
229
181
if (showFields ) {
230
- stringBuilder .append (buildFieldDataString (SORT_FIELD_DATA_MAP . get ( sortBuilder . getClass ()), sortBuilder ));
182
+ stringBuilder .append (buildFieldDataString (sortBuilder ));
231
183
}
232
184
shapeStrings .add (stringBuilder .toString ());
233
185
}
@@ -243,99 +195,11 @@ static String buildSortShape(List<SortBuilder<?>> sortBuilderList, Boolean showF
243
195
* @return String: comma separated list with leading space in square brackets
244
196
* Ex: " [my_field, width:5]"
245
197
*/
246
- static String buildFieldDataString (List < Function < Object , String >> methods , NamedWriteable builder ) {
198
+ static String buildFieldDataString (NamedWriteable builder ) {
247
199
List <String > fieldDataList = new ArrayList <>();
248
- if (methods != null ) {
249
- for (Function <Object , String > lambda : methods ) {
250
- fieldDataList .add (lambda .apply (builder ));
251
- }
200
+ if (builder instanceof WithFieldName ) {
201
+ fieldDataList .add (((WithFieldName ) builder ).fieldName ());
252
202
}
253
203
return " [" + String .join (", " , fieldDataList ) + "]" ;
254
204
}
255
-
256
- /**
257
- * Helper class to create static field data maps
258
- */
259
- private static class FieldDataMapHelper {
260
-
261
- // Helper method to create map entries
262
- private static <T > Map .Entry <Class <?>, List <Function <Object , String >>> createEntry (Class <T > clazz , Function <T , String > extractor ) {
263
- return Map .entry (clazz , List .of (obj -> extractor .apply (clazz .cast (obj ))));
264
- }
265
-
266
- /**
267
- * Returns a map where the keys are query builders, and the values are lists of
268
- * functions that extract field values from instances of these classes.
269
- *
270
- * @return a map with class types as keys and lists of field extraction functions as values.
271
- */
272
- private static Map <Class <?>, List <Function <Object , String >>> getQueryFieldDataMap () {
273
- return Map .ofEntries (
274
- createEntry (AbstractGeometryQueryBuilder .class , AbstractGeometryQueryBuilder ::fieldName ),
275
- createEntry (CommonTermsQueryBuilder .class , CommonTermsQueryBuilder ::fieldName ),
276
- createEntry (ExistsQueryBuilder .class , ExistsQueryBuilder ::fieldName ),
277
- createEntry (FieldMaskingSpanQueryBuilder .class , FieldMaskingSpanQueryBuilder ::fieldName ),
278
- createEntry (FuzzyQueryBuilder .class , FuzzyQueryBuilder ::fieldName ),
279
- createEntry (GeoBoundingBoxQueryBuilder .class , GeoBoundingBoxQueryBuilder ::fieldName ),
280
- createEntry (GeoDistanceQueryBuilder .class , GeoDistanceQueryBuilder ::fieldName ),
281
- createEntry (GeoPolygonQueryBuilder .class , GeoPolygonQueryBuilder ::fieldName ),
282
- createEntry (MatchBoolPrefixQueryBuilder .class , MatchBoolPrefixQueryBuilder ::fieldName ),
283
- createEntry (MatchQueryBuilder .class , MatchQueryBuilder ::fieldName ),
284
- createEntry (MatchPhraseQueryBuilder .class , MatchPhraseQueryBuilder ::fieldName ),
285
- createEntry (MatchPhrasePrefixQueryBuilder .class , MatchPhrasePrefixQueryBuilder ::fieldName ),
286
- createEntry (MultiTermQueryBuilder .class , MultiTermQueryBuilder ::fieldName ),
287
- createEntry (PrefixQueryBuilder .class , PrefixQueryBuilder ::fieldName ),
288
- createEntry (RangeQueryBuilder .class , RangeQueryBuilder ::fieldName ),
289
- createEntry (RegexpQueryBuilder .class , RegexpQueryBuilder ::fieldName ),
290
- createEntry (SpanNearQueryBuilder .SpanGapQueryBuilder .class , SpanNearQueryBuilder .SpanGapQueryBuilder ::fieldName ),
291
- createEntry (SpanTermQueryBuilder .class , SpanTermQueryBuilder ::fieldName ),
292
- createEntry (TermQueryBuilder .class , TermQueryBuilder ::fieldName ),
293
- createEntry (TermsQueryBuilder .class , TermsQueryBuilder ::fieldName ),
294
- createEntry (WildcardQueryBuilder .class , WildcardQueryBuilder ::fieldName )
295
- );
296
- }
297
-
298
- /**
299
- * Returns a map where the keys are aggregation builders, and the values are lists of
300
- * functions that extract field values from instances of these classes.
301
- *
302
- * @return a map with class types as keys and lists of field extraction functions as values.
303
- */
304
- private static Map <Class <?>, List <Function <Object , String >>> getAggFieldDataMap () {
305
- return Map .ofEntries (
306
- createEntry (IpRangeAggregationBuilder .class , IpRangeAggregationBuilder ::field ),
307
- createEntry (AutoDateHistogramAggregationBuilder .class , AutoDateHistogramAggregationBuilder ::field ),
308
- createEntry (DateHistogramAggregationBuilder .class , DateHistogramAggregationBuilder ::field ),
309
- createEntry (HistogramAggregationBuilder .class , HistogramAggregationBuilder ::field ),
310
- createEntry (VariableWidthHistogramAggregationBuilder .class , VariableWidthHistogramAggregationBuilder ::field ),
311
- createEntry (MissingAggregationBuilder .class , MissingAggregationBuilder ::field ),
312
- createEntry (AbstractRangeBuilder .class , AbstractRangeBuilder ::field ),
313
- createEntry (GeoDistanceAggregationBuilder .class , GeoDistanceAggregationBuilder ::field ),
314
- createEntry (DiversifiedAggregationBuilder .class , DiversifiedAggregationBuilder ::field ),
315
- createEntry (RareTermsAggregationBuilder .class , RareTermsAggregationBuilder ::field ),
316
- createEntry (SignificantTermsAggregationBuilder .class , SignificantTermsAggregationBuilder ::field ),
317
- createEntry (TermsAggregationBuilder .class , TermsAggregationBuilder ::field ),
318
- createEntry (AvgAggregationBuilder .class , AvgAggregationBuilder ::field ),
319
- createEntry (CardinalityAggregationBuilder .class , CardinalityAggregationBuilder ::field ),
320
- createEntry (ExtendedStatsAggregationBuilder .class , ExtendedStatsAggregationBuilder ::field ),
321
- createEntry (GeoCentroidAggregationBuilder .class , GeoCentroidAggregationBuilder ::field ),
322
- createEntry (MaxAggregationBuilder .class , MaxAggregationBuilder ::field ),
323
- createEntry (MinAggregationBuilder .class , MinAggregationBuilder ::field ),
324
- createEntry (StatsAggregationBuilder .class , StatsAggregationBuilder ::field ),
325
- createEntry (SumAggregationBuilder .class , SumAggregationBuilder ::field ),
326
- createEntry (ValueCountAggregationBuilder .class , ValueCountAggregationBuilder ::field ),
327
- createEntry (ValuesSourceAggregationBuilder .class , ValuesSourceAggregationBuilder ::field )
328
- );
329
- }
330
-
331
- /**
332
- * Returns a map where the keys are sort builders, and the values are lists of
333
- * functions that extract field values from instances of these classes.
334
- *
335
- * @return a map with class types as keys and lists of field extraction functions as values.
336
- */
337
- private static Map <Class <?>, List <Function <Object , String >>> getSortFieldDataMap () {
338
- return Map .ofEntries (createEntry (FieldSortBuilder .class , FieldSortBuilder ::getFieldName ));
339
- }
340
- }
341
205
}
0 commit comments