|
41 | 41 | import org.opensearch.search.startree.StarTreeQueryContext; |
42 | 42 |
|
43 | 43 | import java.io.IOException; |
44 | | -import java.util.HashMap; |
45 | 44 | import java.util.List; |
46 | 45 | import java.util.Map; |
47 | 46 | import java.util.Set; |
@@ -111,46 +110,23 @@ private static StarTreeQueryContext tryCreateStarTreeQueryContext( |
111 | 110 | Map<String, Long> queryMap; |
112 | 111 | if (queryBuilder == null || queryBuilder instanceof MatchAllQueryBuilder) { |
113 | 112 | queryMap = null; |
114 | | - } else if (queryBuilder instanceof TermQueryBuilder) { |
| 113 | + } else if (queryBuilder instanceof TermQueryBuilder termQueryBuilder) { |
115 | 114 | // TODO: Add support for keyword fields |
116 | | - if (compositeFieldType.getDimensions().stream().anyMatch(d -> d.getDocValuesType() != DocValuesType.SORTED_NUMERIC)) { |
117 | | - // return null for non-numeric fields |
118 | | - return null; |
119 | | - } |
120 | | - |
121 | | - List<String> supportedDimensions = compositeFieldType.getDimensions() |
| 115 | + Dimension matchedDimension = compositeFieldType.getDimensions() |
122 | 116 | .stream() |
123 | | - .map(Dimension::getField) |
124 | | - .collect(Collectors.toList()); |
125 | | - queryMap = getStarTreePredicates(queryBuilder, supportedDimensions); |
126 | | - if (queryMap == null) { |
| 117 | + .filter(d -> (d.getField().equals(termQueryBuilder.fieldName()) && d.getDocValuesType() == DocValuesType.SORTED_NUMERIC)) |
| 118 | + .findFirst() |
| 119 | + .orElse(null); |
| 120 | + if (matchedDimension == null) { |
127 | 121 | return null; |
128 | 122 | } |
| 123 | + queryMap = Map.of(termQueryBuilder.fieldName(), Long.parseLong(termQueryBuilder.value().toString())); |
129 | 124 | } else { |
130 | 125 | return null; |
131 | 126 | } |
132 | 127 | return new StarTreeQueryContext(compositeIndexFieldInfo, queryMap, cacheStarTreeValuesSize); |
133 | 128 | } |
134 | 129 |
|
135 | | - /** |
136 | | - * Parse query body to star-tree predicates |
137 | | - * @param queryBuilder to match star-tree supported query shape |
138 | | - * @return predicates to match |
139 | | - */ |
140 | | - private static Map<String, Long> getStarTreePredicates(QueryBuilder queryBuilder, List<String> supportedDimensions) { |
141 | | - TermQueryBuilder tq = (TermQueryBuilder) queryBuilder; |
142 | | - String field = tq.fieldName(); |
143 | | - if (!supportedDimensions.contains(field)) { |
144 | | - return null; |
145 | | - } |
146 | | - long inputQueryVal = Long.parseLong(tq.value().toString()); |
147 | | - |
148 | | - // Create a map with the field and the value |
149 | | - Map<String, Long> predicateMap = new HashMap<>(); |
150 | | - predicateMap.put(field, inputQueryVal); |
151 | | - return predicateMap; |
152 | | - } |
153 | | - |
154 | 130 | private static boolean validateStarTreeMetricSupport( |
155 | 131 | CompositeDataCubeFieldType compositeIndexFieldInfo, |
156 | 132 | AggregatorFactory aggregatorFactory |
|
0 commit comments