|
@@ -26,6 +26,8 @@ import org.elasticsearch.script.ScriptService.ScriptType;
|
|
|
import org.elasticsearch.script.groovy.GroovyPlugin;
|
|
|
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.metrics.AbstractNumericTestCase;
|
|
|
import org.elasticsearch.search.aggregations.metrics.stats.extended.ExtendedStats;
|
|
|
|
|
@@ -38,6 +40,8 @@ import static org.elasticsearch.index.query.QueryBuilders.matchAllQuery;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.extendedStats;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.global;
|
|
|
import static org.elasticsearch.search.aggregations.AggregationBuilders.histogram;
|
|
|
+import static org.elasticsearch.search.aggregations.AggregationBuilders.missing;
|
|
|
+import static org.elasticsearch.search.aggregations.AggregationBuilders.terms;
|
|
|
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertHitCount;
|
|
|
import static org.hamcrest.Matchers.equalTo;
|
|
|
import static org.hamcrest.Matchers.is;
|
|
@@ -498,6 +502,42 @@ public class ExtendedStatsTests extends AbstractNumericTestCase {
|
|
|
checkUpperLowerBounds(stats, sigma);
|
|
|
}
|
|
|
|
|
|
+ public void testEmptySubAggregation() {
|
|
|
+ SearchResponse searchResponse = client().prepareSearch("idx")
|
|
|
+ .setQuery(matchAllQuery())
|
|
|
+ .addAggregation(terms("value").field("value")
|
|
|
+ .subAggregation(missing("values").field("values")
|
|
|
+ .subAggregation(extendedStats("stats").field("value"))))
|
|
|
+ .execute().actionGet();
|
|
|
+
|
|
|
+ assertHitCount(searchResponse, 10);
|
|
|
+
|
|
|
+ Terms terms = searchResponse.getAggregations().get("value");
|
|
|
+ assertThat(terms, notNullValue());
|
|
|
+ assertThat(terms.getBuckets().size(), equalTo(10));
|
|
|
+
|
|
|
+ for (Terms.Bucket bucket : terms.getBuckets()) {
|
|
|
+ assertThat(bucket.getDocCount(), equalTo(1L));
|
|
|
+
|
|
|
+ Missing missing = bucket.getAggregations().get("values");
|
|
|
+ assertThat(missing, notNullValue());
|
|
|
+ assertThat(missing.getDocCount(), equalTo(0L));
|
|
|
+
|
|
|
+ ExtendedStats stats = missing.getAggregations().get("stats");
|
|
|
+ assertThat(stats, notNullValue());
|
|
|
+ assertThat(stats.getName(), equalTo("stats"));
|
|
|
+ assertThat(stats.getSumOfSquares(), equalTo(0.0));
|
|
|
+ assertThat(stats.getCount(), equalTo(0L));
|
|
|
+ assertThat(stats.getSum(), equalTo(0.0));
|
|
|
+ assertThat(stats.getMin(), equalTo(Double.POSITIVE_INFINITY));
|
|
|
+ assertThat(stats.getMax(), equalTo(Double.NEGATIVE_INFINITY));
|
|
|
+ assertThat(Double.isNaN(stats.getStdDeviation()), is(true));
|
|
|
+ assertThat(Double.isNaN(stats.getAvg()), is(true));
|
|
|
+ assertThat(Double.isNaN(stats.getStdDeviationBound(ExtendedStats.Bounds.UPPER)), is(true));
|
|
|
+ assertThat(Double.isNaN(stats.getStdDeviationBound(ExtendedStats.Bounds.LOWER)), is(true));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private void assertShardExecutionState(SearchResponse response, int expectedFailures) throws Exception {
|
|
|
ShardSearchFailure[] failures = response.getShardFailures();
|
|
@@ -515,4 +555,4 @@ public class ExtendedStatsTests extends AbstractNumericTestCase {
|
|
|
assertThat(stats.getStdDeviationBound(ExtendedStats.Bounds.LOWER), equalTo(stats.getAvg() - (stats.getStdDeviation() * sigma)));
|
|
|
}
|
|
|
|
|
|
-}
|
|
|
+}
|