package es.official.guide.agg; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.action.search.SearchType; import org.elasticsearch.search.aggregations.AggregationBuilders; import org.elasticsearch.search.aggregations.bucket.terms.Terms; import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile; import org.elasticsearch.search.aggregations.metrics.percentiles.PercentileRanks; import org.junit.Test; import es.ESTestBase; public class PercentileRanksAggExamples extends ESTestBase { // GET /website/logs/_search?search_type=count // { // "aggs" : { // "zones" : { // "terms" : { // "field" : "zone" // }, // "aggs" : { // "load_times" : { // "percentile_ranks" : { // "field" : "latency", // "values" : [210, 800] // } // } // } // } // } // } @Test public void testPercentileRanks() { String zones = "zones", loadTimes = "load_times"; SearchResponse response = client .prepareSearch("website") .setTypes("logs") .setSearchType(SearchType.COUNT) .addAggregation( AggregationBuilders .terms(zones) .field("zone") .subAggregation( AggregationBuilders.percentileRanks(loadTimes).field("latency") .percentiles(210, 800))).execute().actionGet(); // read agg Terms terms = response.getAggregations().get(zones); terms.getBuckets().forEach( bucket -> { PercentileRanks pr = bucket.getAggregations().get(loadTimes); pr.forEach((Percentile percentile) -> { System.out.println(String.format("Zone: %s, Latency %f at %f%%", bucket.getKey(), percentile.getValue(), percentile.getPercent())); }); }); } }