@Test public void testEmptyAggregation() throws Exception { SearchResponse searchResponse = client() .prepareSearch("empty_bucket_idx") .setQuery(matchAllQuery()) .addAggregation( histogram("histo") .field("value") .interval(1l) .minDocCount(0) .subAggregation(min("min"))) .execute() .actionGet(); assertThat(searchResponse.getHits().getTotalHits(), equalTo(2l)); Histogram histo = searchResponse.getAggregations().get("histo"); assertThat(histo, notNullValue()); Histogram.Bucket bucket = histo.getBucketByKey(1l); assertThat(bucket, notNullValue()); Min min = bucket.getAggregations().get("min"); assertThat(min, notNullValue()); assertThat(min.getName(), equalTo("min")); assertThat(min.getValue(), equalTo(Double.POSITIVE_INFINITY)); }
// Duel between histograms and scripted terms public void testDuelTermsHistogram() throws Exception { createIndex("idx"); final int numDocs = scaledRandomIntBetween(500, 5000); final int maxNumTerms = randomIntBetween(10, 2000); final int interval = randomIntBetween(1, 100); final Integer[] values = new Integer[maxNumTerms]; for (int i = 0; i < values.length; ++i) { values[i] = randomInt(maxNumTerms * 3) - maxNumTerms; } for (int i = 0; i < numDocs; ++i) { XContentBuilder source = jsonBuilder().startObject().field("num", randomDouble()).startArray("values"); final int numValues = randomInt(4); for (int j = 0; j < numValues; ++j) { source = source.value(randomFrom(values)); } source = source.endArray().endObject(); client().prepareIndex("idx", "type").setSource(source).execute().actionGet(); } assertNoFailures( client() .admin() .indices() .prepareRefresh("idx") .setIndicesOptions(IndicesOptions.lenientExpandOpen()) .execute() .get()); SearchResponse resp = client() .prepareSearch("idx") .addAggregation( terms("terms") .field("values") .collectMode(randomFrom(SubAggCollectionMode.values())) .script("floor(_value / interval)") .param("interval", interval) .size(maxNumTerms)) .addAggregation(histogram("histo").field("values").interval(interval)) .execute() .actionGet(); assertSearchResponse(resp); Terms terms = resp.getAggregations().get("terms"); assertThat(terms, notNullValue()); Histogram histo = resp.getAggregations().get("histo"); assertThat(histo, notNullValue()); assertThat(terms.getBuckets().size(), equalTo(histo.getBuckets().size())); for (Terms.Bucket bucket : terms.getBuckets()) { final long key = bucket.getKeyAsNumber().longValue() * interval; final Histogram.Bucket histoBucket = histo.getBucketByKey(key); assertEquals(bucket.getDocCount(), histoBucket.getDocCount()); } }
@Test public void emptyAggregation() throws Exception { prepareCreate("empty_bucket_idx") .addMapping("type", SINGLE_VALUED_FIELD_NAME, "type=integer") .execute() .actionGet(); List<IndexRequestBuilder> builders = new ArrayList<IndexRequestBuilder>(); for (int i = 0; i < 2; i++) { builders.add( client() .prepareIndex("empty_bucket_idx", "type", "" + i) .setSource( jsonBuilder().startObject().field(SINGLE_VALUED_FIELD_NAME, i * 2).endObject())); } indexRandom(true, builders.toArray(new IndexRequestBuilder[builders.size()])); SearchResponse searchResponse = client() .prepareSearch("empty_bucket_idx") .setQuery(matchAllQuery()) .addAggregation( histogram("histo") .field(SINGLE_VALUED_FIELD_NAME) .interval(1l) .minDocCount(0) .subAggregation(terms("terms"))) .execute() .actionGet(); assertThat(searchResponse.getHits().getTotalHits(), equalTo(2l)); Histogram histo = searchResponse.getAggregations().get("histo"); assertThat(histo, Matchers.notNullValue()); Histogram.Bucket bucket = histo.getBucketByKey(1l); assertThat(bucket, Matchers.notNullValue()); Terms terms = bucket.getAggregations().get("terms"); assertThat(terms, Matchers.notNullValue()); assertThat(terms.getName(), equalTo("terms")); assertThat(terms.getBuckets().isEmpty(), is(true)); }