Search in sources :

Example 11 with Nested

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));
}
Also used : Histogram(org.elasticsearch.search.aggregations.bucket.histogram.Histogram) Nested(org.elasticsearch.search.aggregations.bucket.nested.Nested) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 12 with Nested

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));
}
Also used : Nested(org.elasticsearch.search.aggregations.bucket.nested.Nested) Stats(org.elasticsearch.search.aggregations.metrics.stats.Stats) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 13 with Nested

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]));
    }
}
Also used : Max(org.elasticsearch.search.aggregations.metrics.max.Max) LongTerms(org.elasticsearch.search.aggregations.bucket.terms.LongTerms) Nested(org.elasticsearch.search.aggregations.bucket.nested.Nested) Matchers.containsString(org.hamcrest.Matchers.containsString) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 14 with Nested

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));
}
Also used : Filter(org.elasticsearch.search.aggregations.bucket.filter.Filter) Bucket(org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket) Nested(org.elasticsearch.search.aggregations.bucket.nested.Nested) LongTerms(org.elasticsearch.search.aggregations.bucket.terms.LongTerms) StringTerms(org.elasticsearch.search.aggregations.bucket.terms.StringTerms) Terms(org.elasticsearch.search.aggregations.bucket.terms.Terms) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Example 15 with Nested

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));
}
Also used : Bucket(org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket) StringTerms(org.elasticsearch.search.aggregations.bucket.terms.StringTerms) Nested(org.elasticsearch.search.aggregations.bucket.nested.Nested) LongTerms(org.elasticsearch.search.aggregations.bucket.terms.LongTerms) StringTerms(org.elasticsearch.search.aggregations.bucket.terms.StringTerms) Terms(org.elasticsearch.search.aggregations.bucket.terms.Terms) Sum(org.elasticsearch.search.aggregations.metrics.sum.Sum) SearchResponse(org.elasticsearch.action.search.SearchResponse) ElasticsearchAssertions.assertSearchResponse(org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)

Aggregations

SearchResponse (org.elasticsearch.action.search.SearchResponse)19 Nested (org.elasticsearch.search.aggregations.bucket.nested.Nested)19 ElasticsearchAssertions.assertSearchResponse (org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertSearchResponse)19 Terms (org.elasticsearch.search.aggregations.bucket.terms.Terms)8 LongTerms (org.elasticsearch.search.aggregations.bucket.terms.LongTerms)6 AggregationBuilders.reverseNested (org.elasticsearch.search.aggregations.AggregationBuilders.reverseNested)5 ReverseNested (org.elasticsearch.search.aggregations.bucket.nested.ReverseNested)5 Bucket (org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket)5 StringTerms (org.elasticsearch.search.aggregations.bucket.terms.StringTerms)4 TopHits (org.elasticsearch.search.aggregations.metrics.tophits.TopHits)4 ArrayList (java.util.ArrayList)3 SearchHits (org.elasticsearch.search.SearchHits)3 Filter (org.elasticsearch.search.aggregations.bucket.filter.Filter)3 Histogram (org.elasticsearch.search.aggregations.bucket.histogram.Histogram)3 Matchers.containsString (org.hamcrest.Matchers.containsString)3 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)2 SearchHitField (org.elasticsearch.search.SearchHitField)2 HighlightBuilder (org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder)2 HighlightField (org.elasticsearch.search.fetch.subphase.highlight.HighlightField)2 Explanation (org.apache.lucene.search.Explanation)1