|
@@ -24,20 +24,26 @@ import org.elasticsearch.plugins.Plugin;
|
|
|
import org.elasticsearch.script.Script;
|
|
|
import org.elasticsearch.script.ScriptService.ScriptType;
|
|
|
import org.elasticsearch.script.groovy.GroovyPlugin;
|
|
|
+import org.elasticsearch.search.aggregations.bucket.filter.Filter;
|
|
|
import org.elasticsearch.search.aggregations.bucket.global.Global;
|
|
|
import org.elasticsearch.search.aggregations.bucket.histogram.Histogram;
|
|
|
import org.elasticsearch.search.aggregations.bucket.missing.Missing;
|
|
|
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
|
|
+import org.elasticsearch.search.aggregations.bucket.terms.Terms.Order;
|
|
|
import org.elasticsearch.search.aggregations.metrics.AbstractNumericTestCase;
|
|
|
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
|
|
|
+import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats.Bounds;
|
|
|
|
|
|
import java.util.Collection;
|
|
|
import java.util.Collections;
|
|
|
import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
import java.util.Map;
|
|
|
|
|
|
import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
|
|
|
+import static org.elasticsearch.index.query.QueryBuilders.termQuery;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.extendedStats;
|
|
|
+import static org.elasticsearch.search.aggregations.AggregationBuilders.filter;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.global;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.histogram;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.missing;
|
|
@@ -538,6 +544,45 @@ public class ExtendedStatsTests extends AbstractNumericTestCase {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public void testOrderByEmptyAggregation() throws Exception {
|
|
|
+ SearchResponse searchResponse = client().prepareSearch("idx").setQuery(matchAllQuery())
|
|
|
+ .addAggregation(terms("terms").field("value").order(Order.compound(Order.aggregation("filter>extendedStats.avg", true)))
|
|
|
+ .subAggregation(
|
|
|
+ filter("filter", termQuery("value", 100)).subAggregation(extendedStats("extendedStats").field("value"))))
|
|
|
+ .get();
|
|
|
+
|
|
|
+ assertHitCount(searchResponse, 10);
|
|
|
+
|
|
|
+ Terms terms = searchResponse.getAggregations().get("terms");
|
|
|
+ assertThat(terms, notNullValue());
|
|
|
+ List<Terms.Bucket> buckets = terms.getBuckets();
|
|
|
+ assertThat(buckets, notNullValue());
|
|
|
+ assertThat(buckets.size(), equalTo(10));
|
|
|
+
|
|
|
+ for (int i = 0; i < 10; i++) {
|
|
|
+ Terms.Bucket bucket = buckets.get(i);
|
|
|
+ assertThat(bucket, notNullValue());
|
|
|
+ assertThat(bucket.getKeyAsNumber(), equalTo((long) i + 1));
|
|
|
+ assertThat(bucket.getDocCount(), equalTo(1L));
|
|
|
+ Filter filter = bucket.getAggregations().get("filter");
|
|
|
+ assertThat(filter, notNullValue());
|
|
|
+ assertThat(filter.getDocCount(), equalTo(0L));
|
|
|
+ ExtendedStats extendedStats = filter.getAggregations().get("extendedStats");
|
|
|
+ assertThat(extendedStats, notNullValue());
|
|
|
+ assertThat(extendedStats.getMin(), equalTo(Double.POSITIVE_INFINITY));
|
|
|
+ assertThat(extendedStats.getMax(), equalTo(Double.NEGATIVE_INFINITY));
|
|
|
+ assertThat(extendedStats.getAvg(), equalTo(Double.NaN));
|
|
|
+ assertThat(extendedStats.getSum(), equalTo(0.0));
|
|
|
+ assertThat(extendedStats.getCount(), equalTo(0L));
|
|
|
+ assertThat(extendedStats.getStdDeviation(), equalTo(Double.NaN));
|
|
|
+ assertThat(extendedStats.getSumOfSquares(), equalTo(0.0));
|
|
|
+ assertThat(extendedStats.getVariance(), equalTo(Double.NaN));
|
|
|
+ assertThat(extendedStats.getStdDeviationBound(Bounds.LOWER), equalTo(Double.NaN));
|
|
|
+ assertThat(extendedStats.getStdDeviationBound(Bounds.UPPER), equalTo(Double.NaN));
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
private void assertShardExecutionState(SearchResponse response, int expectedFailures) throws Exception {
|
|
|
ShardSearchFailure[] failures = response.getShardFailures();
|