Skip to content

Commit 98d5a5a

Browse files
committed
iter
1 parent bc009b3 commit 98d5a5a

File tree

3 files changed

+63
-65
lines changed

3 files changed

+63
-65
lines changed

server/src/main/java/org/elasticsearch/action/search/SearchRequestAttributesExtractor.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@
2424
import org.elasticsearch.search.sort.SortBuilder;
2525
import org.elasticsearch.search.vectors.KnnVectorQueryBuilder;
2626

27-
import java.util.ArrayList;
2827
import java.util.HashMap;
29-
import java.util.List;
3028
import java.util.Map;
3129

3230
/**
@@ -53,7 +51,7 @@ public static Map<String, Object> extractAttributes(SearchRequest searchRequest)
5351

5452
SearchSourceBuilder searchSourceBuilder = searchRequest.source();
5553
if (searchSourceBuilder == null) {
56-
return buildAttributesMap(target, ScoreSortBuilder.NAME, HITS_ONLY, false, null, pitOrScroll);
54+
return buildAttributesMap(target, ScoreSortBuilder.NAME, HITS_ONLY, false, false, false, pitOrScroll);
5755
}
5856

5957
if (searchSourceBuilder.pointInTimeBuilder() != null) {
@@ -79,50 +77,58 @@ public static Map<String, Object> extractAttributes(SearchRequest searchRequest)
7977
}
8078

8179
final boolean hasKnn = searchSourceBuilder.knnSearch().isEmpty() == false || queryMetadataBuilder.knnQuery;
82-
return buildAttributesMap(target, primarySort, queryType, hasKnn, queryMetadataBuilder.getRangeFields(), pitOrScroll);
80+
return buildAttributesMap(
81+
target,
82+
primarySort,
83+
queryType,
84+
hasKnn,
85+
queryMetadataBuilder.rangeOnTimestamp,
86+
queryMetadataBuilder.rangeOnEventIngested,
87+
pitOrScroll
88+
);
8389
}
8490

8591
private static Map<String, Object> buildAttributesMap(
8692
String target,
8793
String primarySort,
8894
String queryType,
8995
boolean knn,
90-
String[] rangeFields,
96+
boolean rangeOnTimestamp,
97+
boolean rangeOnEventIngested,
9198
String pitOrScroll
9299
) {
93100
Map<String, Object> attributes = new HashMap<>(5, 1.0f);
94101
attributes.put(TARGET_ATTRIBUTE, target);
95102
attributes.put(SORT_ATTRIBUTE, primarySort);
96-
if (pitOrScroll == null) {
97-
attributes.put(QUERY_TYPE_ATTRIBUTE, queryType);
98-
} else {
99-
attributes.put(QUERY_TYPE_ATTRIBUTE, new String[] { queryType, pitOrScroll });
103+
attributes.put(QUERY_TYPE_ATTRIBUTE, queryType);
104+
if (pitOrScroll != null) {
105+
attributes.put(PIT_SCROLL_ATTRIBUTE, pitOrScroll);
100106
}
101-
102-
attributes.put(KNN_ATTRIBUTE, knn);
103-
if (rangeFields != null) {
104-
attributes.put(RANGES_ATTRIBUTE, rangeFields);
107+
if (knn) {
108+
attributes.put(KNN_ATTRIBUTE, knn);
109+
}
110+
if (rangeOnTimestamp) {
111+
attributes.put(RANGE_TIMESTAMP_ATTRIBUTE, rangeOnTimestamp);
112+
}
113+
if (rangeOnEventIngested) {
114+
attributes.put(RANGE_EVENT_INGESTED_ATTRIBUTE, rangeOnEventIngested);
105115
}
106116
return attributes;
107117
}
108118

109119
private static final class QueryMetadataBuilder {
110120
private boolean knnQuery = false;
111-
private final List<String> rangeFields = new ArrayList<>();
112-
113-
String[] getRangeFields() {
114-
if (rangeFields.isEmpty()) {
115-
return null;
116-
}
117-
return rangeFields.toArray(new String[0]);
118-
}
121+
private boolean rangeOnTimestamp = false;
122+
private boolean rangeOnEventIngested = false;
119123
}
120124

121125
static final String TARGET_ATTRIBUTE = "target";
122126
static final String SORT_ATTRIBUTE = "sort";
123127
static final String QUERY_TYPE_ATTRIBUTE = "query_type";
128+
static final String PIT_SCROLL_ATTRIBUTE = "pit_scroll";
124129
static final String KNN_ATTRIBUTE = "knn";
125-
static final String RANGES_ATTRIBUTE = "ranges";
130+
static final String RANGE_TIMESTAMP_ATTRIBUTE = "range_timestamp";
131+
static final String RANGE_EVENT_INGESTED_ATTRIBUTE = "range_event_ingested";
126132

127133
private static final String TARGET_KIBANA = ".kibana";
128134
private static final String TARGET_ML = ".ml";
@@ -256,9 +262,8 @@ private static void introspectQueryBuilder(QueryBuilder queryBuilder, QueryMetad
256262
break;
257263
case RangeQueryBuilder range:
258264
switch (range.fieldName()) {
259-
case TIMESTAMP -> queryMetadataBuilder.rangeFields.add(TIMESTAMP);
260-
case EVENT_INGESTED -> queryMetadataBuilder.rangeFields.add(EVENT_INGESTED);
261-
default -> queryMetadataBuilder.rangeFields.add(FIELD);
265+
case TIMESTAMP -> queryMetadataBuilder.rangeOnTimestamp = true;
266+
case EVENT_INGESTED -> queryMetadataBuilder.rangeOnEventIngested = true;
262267
}
263268
break;
264269
case KnnVectorQueryBuilder knn:

server/src/test/java/org/elasticsearch/action/search/SearchRequestAttributesExtractorTests.java

Lines changed: 28 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -124,46 +124,50 @@ private static void assertAttributes(
124124
String primarySort,
125125
String queryType,
126126
boolean knn,
127-
String[] rangeFields,
127+
boolean rangeOnTimestamp,
128+
boolean rangeOnEventIngested,
128129
String pitOrScroll
129130
) {
130-
131131
assertEquals(target, attributes.get(SearchRequestAttributesExtractor.TARGET_ATTRIBUTE));
132132
assertEquals(primarySort, attributes.get(SearchRequestAttributesExtractor.SORT_ATTRIBUTE));
133-
if (pitOrScroll == null) {
134-
assertEquals(queryType, attributes.get(SearchRequestAttributesExtractor.QUERY_TYPE_ATTRIBUTE));
133+
assertEquals(queryType, attributes.get(SearchRequestAttributesExtractor.QUERY_TYPE_ATTRIBUTE));
134+
assertEquals(pitOrScroll, attributes.get(SearchRequestAttributesExtractor.PIT_SCROLL_ATTRIBUTE));
135+
if (knn) {
136+
assertEquals(knn, attributes.get(SearchRequestAttributesExtractor.KNN_ATTRIBUTE));
137+
} else {
138+
assertNull(attributes.get(SearchRequestAttributesExtractor.KNN_ATTRIBUTE));
139+
}
140+
if (rangeOnTimestamp) {
141+
assertEquals(rangeOnTimestamp, attributes.get(SearchRequestAttributesExtractor.RANGE_TIMESTAMP_ATTRIBUTE));
135142
} else {
136-
String[] queryTypes = (String[]) attributes.get(SearchRequestAttributesExtractor.QUERY_TYPE_ATTRIBUTE);
137-
assertEquals(queryType, queryTypes[0]);
138-
assertEquals(pitOrScroll, queryTypes[1]);
143+
assertNull(attributes.get(SearchRequestAttributesExtractor.RANGE_TIMESTAMP_ATTRIBUTE));
139144
}
140-
assertEquals(knn, attributes.get(SearchRequestAttributesExtractor.KNN_ATTRIBUTE));
141-
if (rangeFields == null) {
142-
assertFalse(attributes.containsKey(SearchRequestAttributesExtractor.RANGES_ATTRIBUTE));
145+
if (rangeOnEventIngested) {
146+
assertEquals(rangeOnEventIngested, attributes.get(SearchRequestAttributesExtractor.RANGE_EVENT_INGESTED_ATTRIBUTE));
143147
} else {
144-
assertArrayEquals(rangeFields, (String[]) attributes.get(SearchRequestAttributesExtractor.RANGES_ATTRIBUTE));
148+
assertNull(attributes.get(SearchRequestAttributesExtractor.RANGE_EVENT_INGESTED_ATTRIBUTE));
145149
}
146150
}
147151

148152
public void testExtractAttributes() {
149153
{
150154
SearchRequest searchRequest = new SearchRequest();
151155
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
152-
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, null, null);
156+
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, false, false, null);
153157
}
154158
{
155159
SearchRequest searchRequest = new SearchRequest();
156160
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
157161
searchRequest.source(searchSourceBuilder);
158162
searchSourceBuilder.pointInTimeBuilder(new PointInTimeBuilder(BytesArray.EMPTY));
159163
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
160-
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, null, "pit");
164+
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, false, false, "pit");
161165
}
162166
{
163167
SearchRequest searchRequest = new SearchRequest();
164168
searchRequest.scroll(new TimeValue(randomIntBetween(1, 10)));
165169
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
166-
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, null, "scroll");
170+
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, false, false, "scroll");
167171
}
168172
{
169173
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -172,7 +176,7 @@ public void testExtractAttributes() {
172176
searchSourceBuilder.sort("@timestamp");
173177
searchSourceBuilder.query(new RangeQueryBuilder("@timestamp"));
174178
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
175-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
179+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
176180
}
177181
{
178182
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -192,7 +196,7 @@ public void testExtractAttributes() {
192196
boolQueryBuilder.should(new RangeQueryBuilder("event.ingested"));
193197
}
194198
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
195-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
199+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
196200
}
197201
{
198202
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -213,7 +217,7 @@ public void testExtractAttributes() {
213217
boolQueryBuilder.filter(new RangeQueryBuilder("@timestamp"));
214218
searchSourceBuilder.query(boolQueryBuilder);
215219
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
216-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
220+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
217221
}
218222
{
219223
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -226,15 +230,7 @@ public void testExtractAttributes() {
226230
boolQueryBuilder.must(new RangeQueryBuilder(randomAlphaOfLengthBetween(3, 10)));
227231
searchSourceBuilder.query(boolQueryBuilder);
228232
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
229-
assertAttributes(
230-
stringObjectMap,
231-
"user",
232-
"@timestamp",
233-
"hits_only",
234-
false,
235-
new String[] { "@timestamp", "event.ingested", "field" },
236-
null
237-
);
233+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, true, null);
238234
}
239235
{
240236
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -245,7 +241,7 @@ public void testExtractAttributes() {
245241
boolQueryBuilder.should(new RangeQueryBuilder("@timestamp"));
246242
searchSourceBuilder.query(boolQueryBuilder);
247243
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
248-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
244+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
249245
}
250246
{
251247
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -256,7 +252,7 @@ public void testExtractAttributes() {
256252
boolQueryBuilder.should(new RangeQueryBuilder(randomAlphaOfLengthBetween(3, 10)));
257253
searchSourceBuilder.query(boolQueryBuilder);
258254
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
259-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "field" }, null);
255+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, false, false, null);
260256
}
261257
{
262258
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -265,7 +261,7 @@ public void testExtractAttributes() {
265261
searchSourceBuilder.sort("@timestamp");
266262
searchSourceBuilder.query(new ConstantScoreQueryBuilder(new RangeQueryBuilder("@timestamp")));
267263
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
268-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
264+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
269265
}
270266
{
271267
SearchRequest searchRequest = new SearchRequest(randomAlphaOfLengthBetween(3, 10));
@@ -274,7 +270,7 @@ public void testExtractAttributes() {
274270
searchSourceBuilder.sort("@timestamp");
275271
searchSourceBuilder.query(new BoostingQueryBuilder(new RangeQueryBuilder("@timestamp"), new MatchAllQueryBuilder()));
276272
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
277-
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, new String[] { "@timestamp" }, null);
273+
assertAttributes(stringObjectMap, "user", "@timestamp", "hits_only", false, true, false, null);
278274
}
279275
}
280276

@@ -293,7 +289,7 @@ public void testDepthLimit() {
293289
}
294290
newBoolQueryBuilder.must(new RangeQueryBuilder("@timestamp"));
295291
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
296-
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, new String[]{"@timestamp"}, null);
292+
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, true, false, null);
297293
}
298294
{
299295
SearchRequest searchRequest = new SearchRequest("index");
@@ -309,7 +305,7 @@ public void testDepthLimit() {
309305
}
310306
newBoolQueryBuilder.must(new RangeQueryBuilder("@timestamp"));
311307
Map<String, Object> stringObjectMap = SearchRequestAttributesExtractor.extractAttributes(searchRequest);
312-
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, null, null);
308+
assertAttributes(stringObjectMap, "user", "_score", "hits_only", false, false, false, null);
313309
}
314310
}
315311
}

server/src/test/java/org/elasticsearch/search/TelemetryMetrics/SearchTookTimeTelemetryTests.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -119,15 +119,13 @@ public void testSimpleQueryAgainstAlias() {
119119
Measurement measurement = measurements.getFirst();
120120
assertEquals(searchResponse.getTook().millis(), measurement.getLong());
121121
assertSimpleQueryAttributes(measurement.attributes());
122-
123122
}
124123

125124
private static void assertSimpleQueryAttributes(Map<String, Object> attributes) {
126-
assertEquals(4, attributes.size());
125+
assertEquals(3, attributes.size());
127126
assertEquals("user", attributes.get("target"));
128127
assertEquals("hits_only", attributes.get("query_type"));
129128
assertEquals("_score", attributes.get("sort"));
130-
assertEquals(false, attributes.get("knn"));
131129
}
132130

133131
public void testMultiSearch() {
@@ -178,9 +176,9 @@ public void testScroll() {
178176
Map<String, Object> attributes = measurement.attributes();
179177
assertEquals(4, attributes.size());
180178
assertEquals("user", attributes.get("target"));
181-
assertArrayEquals(new String[] { "hits_only", "scroll" }, (String[]) attributes.get("query_type"));
179+
assertEquals("hits_only", attributes.get("query_type"));
180+
assertEquals("scroll", attributes.get("pit_scroll"));
182181
assertEquals("_score", attributes.get("sort"));
183-
assertEquals(false, attributes.get("knn"));
184182
} else {
185183
List<Measurement> measurements = getTestTelemetryPlugin().getLongHistogramMeasurement(
186184
TOOK_DURATION_TOTAL_HISTOGRAM_NAME
@@ -260,12 +258,11 @@ public void testTimeRangeFilterOneResults() {
260258
}
261259

262260
private static void assertTimeRangeAttributes(Map<String, Object> attributes) {
263-
assertEquals(5, attributes.size());
261+
assertEquals(4, attributes.size());
264262
assertEquals("user", attributes.get("target"));
265263
assertEquals("hits_only", attributes.get("query_type"));
266264
assertEquals("_score", attributes.get("sort"));
267-
assertEquals(false, attributes.get("knn"));
268-
assertArrayEquals(new String[] { "@timestamp" }, (String[]) attributes.get("ranges"));
265+
assertEquals(true, attributes.get("range_timestamp"));
269266
}
270267

271268
private void resetMeter() {

0 commit comments

Comments
 (0)