|
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