1. 程式人生 > >【工作筆記】ElasticSearch從零開始學(六)—— JavaAPI_Aggregation

【工作筆記】ElasticSearch從零開始學(六)—— JavaAPI_Aggregation

StructAggregation

SearchResponse sr = client.prepareSearch()
                .addAggregation(
                //關係
                AggregationBuilders.terms("by_country").field("country") 
                //時間     
                .subAggregation( AggregationBuilders.dateHistogram("by_year").field("dateOfBirth"
) .dateHistogramInterval(DateHistogramInterval.YEAR) //平均 .subAggregation( AggregationBuilders.avg("avg_children").field("children")) ) ) .execute() .actionGet();

聚合基本資料結構

    "<aggregation_name>"
: { "<aggregation_type>" : { <aggregation_body> } [,"meta" : { [<meta_data_body>] } ]? [,"aggregations" : { [<sub_aggregation>]+ } ]? } [,"<aggregation_name_2>" : { ... } ]* }

MetricAggregation

Min

import org.elasticsearch
.search.aggregations.metrics.min.Min; MinAggregationBuilder aggregation = AggregationBuilders .min("agg") .field("height");

得到單個結果

// sr is here your SearchResponse object
Min agg = sr.getAggregations().get("agg");
double value = agg.getValue();

Max

MaxAggregationBuilder aggregation =
        AggregationBuilders
                .max("agg")
                .field("height");

Sum

SumAggregationBuilder aggregation =
        AggregationBuilders
                .sum("agg")
                .field("height");

AVG

AvgAggregationBuilder aggregation =
        AggregationBuilders
                .avg("agg")
                .field("height");

Java建立聚合基本格式

StatsAggregationBuilder aggregation =
        AggregationBuilders
                .stats("agg") //相當於聚合函式
                .field("height");//彙總屬性

簡化

import org.elasticsearch.search.aggregations.metrics.stats.Stats;

// sr is here your SearchResponse object
Stats agg = sr.getAggregations().get("agg");
double min = agg.getMin();
double max = agg.getMax();
double avg = agg.getAvg();
double sum = agg.getSum();
long count = agg.getCount();

count

ValueCountAggregationBuilder aggregation =
        AggregationBuilders
                .count("agg")
                .field("height");
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;

// sr is here your SearchResponse object
ValueCount agg = sr.getAggregations().get("agg");
long value = agg.getValue();

percent

PercentilesAggregationBuilder aggregation =
        AggregationBuilders
                .percentiles("agg")
                .field("height")
                //.percentiles(1.0, 5.0, 10.0, 20.0, 30.0, 75.0, 95.0, 99.0);
// sr is here your SearchResponse object
Percentiles agg = sr.getAggregations().get("agg");
// For each entry
for (Percentile entry : agg) {
    double percent = entry.getPercent();    // Percent
    double value = entry.getValue();        // Value

    logger.info("percent [{}], value [{}]", percent, value);
}