package es.official.guide.agg;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;
import org.junit.Test;
import es.ESTestBase;
/**
* http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/percentiles.html
*/
public class PercentilesAggExamples extends ESTestBase {
// GET /website/logs/_search?search_type=count
// {
// "aggs" : {
// "load_times" : {
// "percentiles" : {
// "field" : "latency"
// }
// },
// "avg_load_time" : {
// "avg" : {
// "field" : "latency"
// }
// }
// }
// }
@Test
public void testPercentiles() {
String loadTimes = "load_times", avgLoadTime = "avg_load_time";
SearchResponse response =
client.prepareSearch("website").setTypes("logs")
.addAggregation(AggregationBuilders.percentiles(loadTimes).field("latency"))
.addAggregation(AggregationBuilders.avg(avgLoadTime).field("latency")).execute()
.actionGet();
// read agg
Percentiles percentiles = response.getAggregations().get(loadTimes);
percentiles.forEach(percentile -> {
System.out.printf("Percentage: %f, Value: %f\n", percentile.getPercent(),
percentile.getValue());
});
Avg avg = response.getAggregations().get(avgLoadTime);
System.out.println("Average latency: " + avg.getValue());
}
// GET /website/logs/_search?search_type=count
// {
// "aggs" : {
// "zones" : {
// "terms" : {
// "field" : "zone"
// },
// "aggs" : {
// "load_times" : {
// "percentiles" : {
// "field" : "latency",
// "percents" : [50, 95.0, 99.0]
// }
// },
// "load_avg" : {
// "avg" : {
// "field" : "latency"
// }
// }
// }
// }
// }
// }
@Test
public void testPercentilesWithTerms() {
String zones = "zones", loadTimes = "load_times", avgLoadTime = "avg_load_time";
SearchResponse response =
client
.prepareSearch("website")
.setTypes("logs")
.addAggregation(
AggregationBuilders
.terms(zones)
.field("zone")
.subAggregation(
AggregationBuilders.percentiles(loadTimes).field("latency")
.percentiles(50.0, 95.0, 99.0))
.subAggregation(AggregationBuilders.avg(avgLoadTime).field("latency")))
.execute().actionGet();
// read agg
Terms terms = response.getAggregations().get(zones);
terms.getBuckets().forEach(
bucket -> {
Percentiles percentiles = bucket.getAggregations().get(loadTimes);
percentiles.forEach(percentile -> {
System.out.printf("Percentage: %f, Value: %f\n", percentile.getPercent(),
percentile.getValue());
});
Avg avg = bucket.getAggregations().get(avgLoadTime);
System.out.println("Average latency: " + avg.getValue());
});
}
}