Skip to content

Commit 2c342f1

Browse files
authored
Add test for bucket sorting to rate agg (#64741)
In the initial implementation I missed the the test to check if bucket sorting works correctly. This commit adds this test. Relates to #60674
1 parent be97252 commit 2c342f1

File tree

1 file changed

+75
-0
lines changed

1 file changed

+75
-0
lines changed

x-pack/plugin/analytics/src/test/java/org/elasticsearch/xpack/analytics/rate/RateAggregatorTests.java

+75
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.elasticsearch.script.ScriptService;
5050
import org.elasticsearch.script.ScriptType;
5151
import org.elasticsearch.search.aggregations.AggregatorTestCase;
52+
import org.elasticsearch.search.aggregations.BucketOrder;
5253
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
5354
import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
5455
import org.elasticsearch.search.aggregations.bucket.histogram.InternalDateHistogram;
@@ -354,6 +355,80 @@ public void testKeywordSandwich() throws IOException {
354355
}, dateType, numType, keywordType);
355356
}
356357

358+
public void testKeywordSandwichWithSorting() throws IOException {
359+
MappedFieldType numType = new NumberFieldMapper.NumberFieldType("val", NumberFieldMapper.NumberType.INTEGER);
360+
MappedFieldType dateType = dateFieldType(DATE_FIELD);
361+
MappedFieldType keywordType = new KeywordFieldMapper.KeywordFieldType("term");
362+
RateAggregationBuilder rateAggregationBuilder = new RateAggregationBuilder("my_rate").rateUnit("week").field("val");
363+
boolean useSum = randomBoolean();
364+
if (useSum) {
365+
if (randomBoolean()) {
366+
rateAggregationBuilder.rateMode("sum");
367+
}
368+
} else {
369+
rateAggregationBuilder.rateMode("value_count");
370+
}
371+
TermsAggregationBuilder termsAggregationBuilder = new TermsAggregationBuilder("my_term").field("term")
372+
.order(BucketOrder.aggregation("my_rate", false))
373+
.subAggregation(rateAggregationBuilder);
374+
DateHistogramAggregationBuilder dateHistogramAggregationBuilder = new DateHistogramAggregationBuilder("my_date").field(DATE_FIELD)
375+
.calendarInterval(new DateHistogramInterval("week"))
376+
.subAggregation(termsAggregationBuilder);
377+
378+
testCase(dateHistogramAggregationBuilder, new MatchAllDocsQuery(), iw -> {
379+
iw.addDocument(
380+
doc("2020-11-02T01:07:45", new NumericDocValuesField("val", 1), new SortedSetDocValuesField("term", new BytesRef("a")))
381+
);
382+
iw.addDocument(
383+
doc("2020-11-03T01:07:45", new NumericDocValuesField("val", 2), new SortedSetDocValuesField("term", new BytesRef("a")))
384+
);
385+
iw.addDocument(
386+
doc("2020-11-04T03:43:34", new NumericDocValuesField("val", 4), new SortedSetDocValuesField("term", new BytesRef("b")))
387+
);
388+
iw.addDocument(
389+
doc("2020-11-09T03:43:34", new NumericDocValuesField("val", 30), new SortedSetDocValuesField("term", new BytesRef("a")))
390+
);
391+
iw.addDocument(
392+
doc("2020-11-10T03:43:34", new NumericDocValuesField("val", 4), new SortedSetDocValuesField("term", new BytesRef("b")))
393+
);
394+
iw.addDocument(
395+
doc("2020-11-11T03:43:34", new NumericDocValuesField("val", 4), new SortedSetDocValuesField("term", new BytesRef("b")))
396+
);
397+
}, (Consumer<InternalDateHistogram>) dh -> {
398+
assertThat(dh.getBuckets(), hasSize(2));
399+
if (useSum) {
400+
StringTerms st1 = (StringTerms) dh.getBuckets().get(0).getAggregations().asList().get(0);
401+
assertThat(st1.getBuckets(), hasSize(2));
402+
assertThat(st1.getBuckets().get(0).getKeyAsString(), equalTo("b"));
403+
assertThat(((InternalRate) st1.getBuckets().get(0).getAggregations().asList().get(0)).value(), closeTo(4.0, 0.000001));
404+
assertThat(st1.getBuckets().get(1).getKeyAsString(), equalTo("a"));
405+
assertThat(((InternalRate) st1.getBuckets().get(1).getAggregations().asList().get(0)).value(), closeTo(3.0, 0.000001));
406+
407+
StringTerms st2 = (StringTerms) dh.getBuckets().get(1).getAggregations().asList().get(0);
408+
assertThat(st2.getBuckets(), hasSize(2));
409+
assertThat(st2.getBuckets().get(0).getKeyAsString(), equalTo("a"));
410+
assertThat(((InternalRate) st2.getBuckets().get(0).getAggregations().asList().get(0)).value(), closeTo(30.0, 0.000001));
411+
assertThat(st2.getBuckets().get(1).getKeyAsString(), equalTo("b"));
412+
assertThat(((InternalRate) st2.getBuckets().get(1).getAggregations().asList().get(0)).value(), closeTo(8.0, 0.000001));
413+
} else {
414+
StringTerms st1 = (StringTerms) dh.getBuckets().get(0).getAggregations().asList().get(0);
415+
assertThat(st1.getBuckets(), hasSize(2));
416+
assertThat(st1.getBuckets().get(0).getKeyAsString(), equalTo("a"));
417+
assertThat(((InternalRate) st1.getBuckets().get(0).getAggregations().asList().get(0)).value(), closeTo(2.0, 0.000001));
418+
assertThat(st1.getBuckets().get(1).getKeyAsString(), equalTo("b"));
419+
assertThat(((InternalRate) st1.getBuckets().get(1).getAggregations().asList().get(0)).value(), closeTo(1.0, 0.000001));
420+
421+
StringTerms st2 = (StringTerms) dh.getBuckets().get(1).getAggregations().asList().get(0);
422+
assertThat(st2.getBuckets(), hasSize(2));
423+
assertThat(st2.getBuckets().get(0).getKeyAsString(), equalTo("b"));
424+
assertThat(((InternalRate) st2.getBuckets().get(0).getAggregations().asList().get(0)).value(), closeTo(2.0, 0.000001));
425+
assertThat(st2.getBuckets().get(1).getKeyAsString(), equalTo("a"));
426+
assertThat(((InternalRate) st2.getBuckets().get(1).getAggregations().asList().get(0)).value(), closeTo(1.0, 0.000001));
427+
428+
}
429+
}, dateType, numType, keywordType);
430+
}
431+
357432
public void testScriptMonthToDay() throws IOException {
358433
testCase(
359434
new MatchAllDocsQuery(),

0 commit comments

Comments
 (0)