use of org.elasticsearch.search.aggregations.bucket.nested.Nested in project elasticsearch by elastic.
the class NestedIT method testEmptyAggregation.
public void testEmptyAggregation() throws Exception {
SearchResponse searchResponse = client().prepareSearch("empty_bucket_idx").setQuery(matchAllQuery()).addAggregation(histogram("histo").field("value").interval(1L).minDocCount(0).subAggregation(nested("nested", "nested"))).execute().actionGet();
assertThat(searchResponse.getHits().getTotalHits(), equalTo(2L));
Histogram histo = searchResponse.getAggregations().get("histo");
assertThat(histo, Matchers.notNullValue());
Histogram.Bucket bucket = histo.getBuckets().get(1);
assertThat(bucket, Matchers.notNullValue());
Nested nested = bucket.getAggregations().get("nested");
assertThat(nested, Matchers.notNullValue());
assertThat(nested.getName(), equalTo("nested"));
assertThat(nested.getDocCount(), is(0L));
}
use of org.elasticsearch.search.aggregations.bucket.nested.Nested in project elasticsearch by elastic.
the class NestedIT method testSimple.
public void testSimple() throws Exception {
SearchResponse response = client().prepareSearch("idx").addAggregation(nested("nested", "nested").subAggregation(stats("nested_value_stats").field("nested.value"))).execute().actionGet();
assertSearchResponse(response);
double min = Double.POSITIVE_INFINITY;
double max = Double.NEGATIVE_INFINITY;
long sum = 0;
long count = 0;
for (int i = 0; i < numParents; ++i) {
for (int j = 0; j < numChildren[i]; ++j) {
final long value = i + 1 + j;
min = Math.min(min, value);
max = Math.max(max, value);
sum += value;
++count;
}
}
Nested nested = response.getAggregations().get("nested");
assertThat(nested, notNullValue());
assertThat(nested.getName(), equalTo("nested"));
assertThat(nested.getDocCount(), equalTo(count));
assertThat(nested.getAggregations().asList().isEmpty(), is(false));
Stats stats = nested.getAggregations().get("nested_value_stats");
assertThat(stats, notNullValue());
assertThat(stats.getMin(), equalTo(min));
assertThat(stats.getMax(), equalTo(max));
assertThat(stats.getCount(), equalTo(count));
assertThat(stats.getSum(), equalTo((double) sum));
assertThat(stats.getAvg(), equalTo((double) sum / count));
}
use of org.elasticsearch.search.aggregations.bucket.nested.Nested in project elasticsearch by elastic.
the class NestedIT method testNestedAsSubAggregation.
public void testNestedAsSubAggregation() throws Exception {
SearchResponse response = client().prepareSearch("idx").addAggregation(terms("top_values").field("value").size(100).collectMode(aggCollectionMode).subAggregation(nested("nested", "nested").subAggregation(max("max_value").field("nested.value")))).execute().actionGet();
assertSearchResponse(response);
LongTerms values = response.getAggregations().get("top_values");
assertThat(values, notNullValue());
assertThat(values.getName(), equalTo("top_values"));
assertThat(values.getBuckets(), notNullValue());
assertThat(values.getBuckets().size(), equalTo(numParents));
for (int i = 0; i < numParents; i++) {
String topValue = "" + (i + 1);
assertThat(values.getBucketByKey(topValue), notNullValue());
Nested nested = values.getBucketByKey(topValue).getAggregations().get("nested");
assertThat(nested, notNullValue());
Max max = nested.getAggregations().get("max_value");
assertThat(max, notNullValue());
assertThat(max.getValue(), equalTo(numChildren[i] == 0 ? Double.NEGATIVE_INFINITY : (double) i + numChildren[i]));
}
}
use of org.elasticsearch.search.aggregations.bucket.nested.Nested in project elasticsearch by elastic.
the class NestedIT method testFilterAggInsideNestedAgg.
public void testFilterAggInsideNestedAgg() throws Exception {
assertAcked(prepareCreate("classes").addMapping("class", jsonBuilder().startObject().startObject("class").startObject("properties").startObject("name").field("type", "text").endObject().startObject("methods").field("type", "nested").startObject("properties").startObject("name").field("type", "text").endObject().startObject("return_type").field("type", "keyword").endObject().startObject("parameters").field("type", "nested").startObject("properties").startObject("name").field("type", "text").endObject().startObject("type").field("type", "keyword").endObject().endObject().endObject().endObject().endObject().endObject().endObject().endObject()));
client().prepareIndex("classes", "class", "1").setSource(jsonBuilder().startObject().field("name", "QueryBuilder").startArray("methods").startObject().field("name", "toQuery").field("return_type", "Query").startArray("parameters").startObject().field("name", "context").field("type", "QueryShardContext").endObject().endArray().endObject().startObject().field("name", "queryName").field("return_type", "QueryBuilder").startArray("parameters").startObject().field("name", "queryName").field("type", "String").endObject().endArray().endObject().startObject().field("name", "boost").field("return_type", "QueryBuilder").startArray("parameters").startObject().field("name", "boost").field("type", "float").endObject().endArray().endObject().endArray().endObject()).get();
client().prepareIndex("classes", "class", "2").setSource(jsonBuilder().startObject().field("name", "Document").startArray("methods").startObject().field("name", "add").field("return_type", "void").startArray("parameters").startObject().field("name", "field").field("type", "IndexableField").endObject().endArray().endObject().startObject().field("name", "removeField").field("return_type", "void").startArray("parameters").startObject().field("name", "name").field("type", "String").endObject().endArray().endObject().startObject().field("name", "removeFields").field("return_type", "void").startArray("parameters").startObject().field("name", "name").field("type", "String").endObject().endArray().endObject().endArray().endObject()).get();
refresh();
SearchResponse response = client().prepareSearch("classes").addAggregation(nested("to_method", "methods").subAggregation(filter("num_string_params", nestedQuery("methods.parameters", termQuery("methods.parameters.type", "String"), ScoreMode.None)))).get();
Nested toMethods = response.getAggregations().get("to_method");
Filter numStringParams = toMethods.getAggregations().get("num_string_params");
assertThat(numStringParams.getDocCount(), equalTo(3L));
response = client().prepareSearch("classes").addAggregation(nested("to_method", "methods").subAggregation(terms("return_type").field("methods.return_type").subAggregation(filter("num_string_params", nestedQuery("methods.parameters", termQuery("methods.parameters.type", "String"), ScoreMode.None))))).get();
toMethods = response.getAggregations().get("to_method");
Terms terms = toMethods.getAggregations().get("return_type");
Bucket bucket = terms.getBucketByKey("void");
assertThat(bucket.getDocCount(), equalTo(3L));
numStringParams = bucket.getAggregations().get("num_string_params");
assertThat(numStringParams.getDocCount(), equalTo(2L));
bucket = terms.getBucketByKey("QueryBuilder");
assertThat(bucket.getDocCount(), equalTo(2L));
numStringParams = bucket.getAggregations().get("num_string_params");
assertThat(numStringParams.getDocCount(), equalTo(1L));
bucket = terms.getBucketByKey("Query");
assertThat(bucket.getDocCount(), equalTo(1L));
numStringParams = bucket.getAggregations().get("num_string_params");
assertThat(numStringParams.getDocCount(), equalTo(0L));
}
use of org.elasticsearch.search.aggregations.bucket.nested.Nested in project elasticsearch by elastic.
the class NestedIT method testNestNestedAggs.
public void testNestNestedAggs() throws Exception {
SearchResponse response = client().prepareSearch("idx_nested_nested_aggs").addAggregation(nested("level1", "nested1").subAggregation(terms("a").field("nested1.a.keyword").collectMode(aggCollectionMode).subAggregation(nested("level2", "nested1.nested2").subAggregation(sum("sum").field("nested1.nested2.b"))))).get();
assertSearchResponse(response);
Nested level1 = response.getAggregations().get("level1");
assertThat(level1, notNullValue());
assertThat(level1.getName(), equalTo("level1"));
assertThat(level1.getDocCount(), equalTo(2L));
StringTerms a = level1.getAggregations().get("a");
Terms.Bucket bBucket = a.getBucketByKey("a");
assertThat(bBucket.getDocCount(), equalTo(1L));
Nested level2 = bBucket.getAggregations().get("level2");
assertThat(level2.getDocCount(), equalTo(1L));
Sum sum = level2.getAggregations().get("sum");
assertThat(sum.getValue(), equalTo(2d));
a = level1.getAggregations().get("a");
bBucket = a.getBucketByKey("b");
assertThat(bBucket.getDocCount(), equalTo(1L));
level2 = bBucket.getAggregations().get("level2");
assertThat(level2.getDocCount(), equalTo(1L));
sum = level2.getAggregations().get("sum");
assertThat(sum.getValue(), equalTo(2d));
}
Aggregations