【工作筆記】ElasticSearch從零開始學(六)—— JavaAPI_Aggregation
阿新 • • 發佈:2019-02-14
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);
}