|
50 | 50 | import org.elasticsearch.index.mapper.Uid;
|
51 | 51 | import org.elasticsearch.index.query.QueryBuilders;
|
52 | 52 | import org.elasticsearch.indices.breaker.NoneCircuitBreakerService;
|
| 53 | +import org.elasticsearch.script.Script; |
53 | 54 | import org.elasticsearch.search.SearchHit;
|
54 | 55 | import org.elasticsearch.search.aggregations.AggregationBuilder;
|
55 | 56 | import org.elasticsearch.search.aggregations.AggregationBuilders;
|
| 57 | +import org.elasticsearch.search.aggregations.AggregationExecutionException; |
56 | 58 | import org.elasticsearch.search.aggregations.Aggregator;
|
57 | 59 | import org.elasticsearch.search.aggregations.AggregatorTestCase;
|
58 | 60 | import org.elasticsearch.search.aggregations.BucketOrder;
|
|
67 | 69 | import org.elasticsearch.search.aggregations.bucket.nested.NestedAggregationBuilder;
|
68 | 70 | import org.elasticsearch.search.aggregations.metrics.tophits.InternalTopHits;
|
69 | 71 | import org.elasticsearch.search.aggregations.metrics.tophits.TopHitsAggregationBuilder;
|
| 72 | +import org.elasticsearch.search.aggregations.pipeline.bucketscript.BucketScriptPipelineAggregationBuilder; |
70 | 73 | import org.elasticsearch.search.aggregations.support.ValueType;
|
71 | 74 | import org.elasticsearch.search.sort.FieldSortBuilder;
|
72 | 75 | import org.elasticsearch.search.sort.ScoreSortBuilder;
|
|
83 | 86 | import java.util.function.Function;
|
84 | 87 |
|
85 | 88 | import static org.elasticsearch.index.mapper.SeqNoFieldMapper.PRIMARY_TERM_NAME;
|
| 89 | +import static org.elasticsearch.search.aggregations.AggregationBuilders.terms; |
| 90 | +import static org.elasticsearch.search.aggregations.pipeline.PipelineAggregatorBuilders.bucketScript; |
86 | 91 | import static org.hamcrest.Matchers.equalTo;
|
87 | 92 | import static org.hamcrest.Matchers.greaterThan;
|
88 | 93 | import static org.hamcrest.Matchers.instanceOf;
|
@@ -1060,6 +1065,34 @@ public void testWithNestedAggregations() throws IOException {
|
1060 | 1065 | }
|
1061 | 1066 | }
|
1062 | 1067 |
|
| 1068 | + public void testOrderByPipelineAggregation() throws Exception { |
| 1069 | + try (Directory directory = newDirectory()) { |
| 1070 | + try (RandomIndexWriter indexWriter = new RandomIndexWriter(random(), directory)) { |
| 1071 | + try (IndexReader indexReader = maybeWrapReaderEs(indexWriter.getReader())) { |
| 1072 | + IndexSearcher indexSearcher = newIndexSearcher(indexReader); |
| 1073 | + |
| 1074 | + BucketScriptPipelineAggregationBuilder bucketScriptAgg = bucketScript( |
| 1075 | + "script", new Script("2.718")); |
| 1076 | + TermsAggregationBuilder termsAgg = terms("terms") |
| 1077 | + .field("field") |
| 1078 | + .valueType(ValueType.STRING) |
| 1079 | + .order(BucketOrder.aggregation("script", true)) |
| 1080 | + .subAggregation(bucketScriptAgg); |
| 1081 | + |
| 1082 | + MappedFieldType fieldType = new KeywordFieldMapper.KeywordFieldType(); |
| 1083 | + fieldType.setName("field"); |
| 1084 | + fieldType.setHasDocValues(true); |
| 1085 | + |
| 1086 | + AggregationExecutionException e = expectThrows(AggregationExecutionException.class, |
| 1087 | + () -> createAggregator(termsAgg, indexSearcher, fieldType)); |
| 1088 | + assertEquals("Invalid aggregator order path [script]. The provided aggregation [script] " + |
| 1089 | + "either does not exist, or is a pipeline aggregation and cannot be used to sort the buckets.", |
| 1090 | + e.getMessage()); |
| 1091 | + } |
| 1092 | + } |
| 1093 | + } |
| 1094 | + } |
| 1095 | + |
1063 | 1096 | private final SeqNoFieldMapper.SequenceIDFields sequenceIDFields = SeqNoFieldMapper.SequenceIDFields.emptySeqID();
|
1064 | 1097 | private List<Document> generateDocsWithNested(String id, int value, int[] nestedValues) {
|
1065 | 1098 | List<Document> documents = new ArrayList<>();
|
|
0 commit comments