|
49 | 49 | import org.elasticsearch.script.ScriptService;
|
50 | 50 | import org.elasticsearch.script.ScriptType;
|
51 | 51 | import org.elasticsearch.search.aggregations.AggregatorTestCase;
|
| 52 | +import org.elasticsearch.search.aggregations.BucketOrder; |
52 | 53 | import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder;
|
53 | 54 | import org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramInterval;
|
54 | 55 | import org.elasticsearch.search.aggregations.bucket.histogram.InternalDateHistogram;
|
@@ -354,6 +355,80 @@ public void testKeywordSandwich() throws IOException {
|
354 | 355 | }, dateType, numType, keywordType);
|
355 | 356 | }
|
356 | 357 |
|
| 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 | + |
357 | 432 | public void testScriptMonthToDay() throws IOException {
|
358 | 433 | testCase(
|
359 | 434 | new MatchAllDocsQuery(),
|
|
0 commit comments