/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.elasticsearch.search.aggregations;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Requests;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.json.JsonXContent;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.TermsBuilder;
import org.elasticsearch.test.ESIntegTestCase;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import static org.elasticsearch.common.xcontent.XContentFactory.jsonBuilder;
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.core.IsNull.notNullValue;
@ESIntegTestCase.SuiteScopeTestCase
public class AggregationsBinaryIT extends ESIntegTestCase {
private static final String STRING_FIELD_NAME = "s_value";
private static final String INT_FIELD_NAME = "i_value";
@Override
public void setupSuiteScopeCluster() throws Exception {
createIndex("idx");
List<IndexRequestBuilder> builders = new ArrayList<>();
for (int i = 0; i < 5; i++) {
builders.add(client().prepareIndex("idx", "type").setSource(
jsonBuilder().startObject().field(STRING_FIELD_NAME, "val" + i).field(INT_FIELD_NAME, i).endObject()));
}
indexRandom(true, builders);
ensureSearchable();
}
@Test
public void testAggregationsBinary() throws Exception {
TermsBuilder termsBuilder = AggregationBuilders.terms("terms").field(STRING_FIELD_NAME);
TermsBuilder subTerm = AggregationBuilders.terms("subterms").field(INT_FIELD_NAME);
// Create an XContentBuilder from sub aggregation
XContentBuilder subTermContentBuilder = JsonXContent.contentBuilder().startObject();
subTerm.toXContent(subTermContentBuilder, ToXContent.EMPTY_PARAMS);
subTermContentBuilder.endObject();
// Add sub aggregation as a XContentBuilder (binary_aggregation)
termsBuilder.subAggregation(subTermContentBuilder);
SearchResponse response = client().prepareSearch("idx").setTypes("type").addAggregation(termsBuilder).execute().actionGet();
assertSearchResponse(response);
Terms terms = response.getAggregations().get("terms");
assertThat(terms, notNullValue());
assertThat(terms.getName(), equalTo("terms"));
assertThat(terms.getBuckets().size(), equalTo(5));
for (int i = 0; i < 5; i++) {
Terms.Bucket bucket = terms.getBucketByKey("val" + i);
assertThat(bucket, notNullValue());
assertThat(bucket.getKeyAsString(), equalTo("val" + i));
assertThat(bucket.getDocCount(), equalTo(1l));
Aggregations subAggs = bucket.getAggregations();
assertThat(subAggs, notNullValue());
assertThat(subAggs.asList().size(), equalTo(1));
Terms subTerms = subAggs.get("subterms");
assertThat(subTerms, notNullValue());
List<Bucket> subTermsBuckets = subTerms.getBuckets();
assertThat(subTermsBuckets, notNullValue());
assertThat(subTermsBuckets.size(), equalTo(1));
assertThat(((Number) subTermsBuckets.get(0).getKey()).intValue(), equalTo(i));
assertThat(subTermsBuckets.get(0).getDocCount(), equalTo(1l));
}
}
@Test
public void testAggregationsBinarySameContentType() throws Exception {
TermsBuilder termsBuilder = AggregationBuilders.terms("terms").field(STRING_FIELD_NAME);
TermsBuilder subTerm = AggregationBuilders.terms("subterms").field(INT_FIELD_NAME);
// Create an XContentBuilder from sub aggregation
XContentBuilder subTermContentBuilder = XContentFactory.contentBuilder(Requests.CONTENT_TYPE);
subTermContentBuilder.startObject();
subTerm.toXContent(subTermContentBuilder, ToXContent.EMPTY_PARAMS);
subTermContentBuilder.endObject();
// Add sub aggregation as a XContentBuilder (binary_aggregation)
termsBuilder.subAggregation(subTermContentBuilder);
SearchResponse response = client().prepareSearch("idx").setTypes("type").addAggregation(termsBuilder).execute().actionGet();
assertSearchResponse(response);
Terms terms = response.getAggregations().get("terms");
assertThat(terms, notNullValue());
assertThat(terms.getName(), equalTo("terms"));
assertThat(terms.getBuckets().size(), equalTo(5));
for (int i = 0; i < 5; i++) {
Terms.Bucket bucket = terms.getBucketByKey("val" + i);
assertThat(bucket, notNullValue());
assertThat(bucket.getKeyAsString(), equalTo("val" + i));
assertThat(bucket.getDocCount(), equalTo(1l));
Aggregations subAggs = bucket.getAggregations();
assertThat(subAggs, notNullValue());
assertThat(subAggs.asList().size(), equalTo(1));
Terms subTerms = subAggs.get("subterms");
assertThat(subTerms, notNullValue());
List<Bucket> subTermsBuckets = subTerms.getBuckets();
assertThat(subTermsBuckets, notNullValue());
assertThat(subTermsBuckets.size(), equalTo(1));
assertThat(((Number) subTermsBuckets.get(0).getKey()).intValue(), equalTo(i));
assertThat(subTermsBuckets.get(0).getDocCount(), equalTo(1l));
}
}
}