度量聚合从文档中提取出来的值并进行计算。这些值通常从文档中的字段(使用数据字段)中提取出来,单也可以使用脚本进行计算。
数字型度量聚合是一种特殊类型的度量聚合,输出数字型的值。聚合输出一个数字指标(例如平均值聚合)称之为单值数字型度量聚合,产生多个指标值(例如统计聚合)称之为多值数字型度量聚合。当这些聚合直接作为一些分组聚合的子聚合时,单值和多值数字型度量聚合的内容就会发挥巨大的作用。例如分组聚合可以对度量聚合后的返回的值进行排序。
1、 最小值聚合;
2、 最大值聚合;
3、 平均值聚合;
4、 和聚合;
5、 值计数聚合;
6、 统计聚合;
1、最小值聚合
最小值聚合一个单值度量聚合,它跟踪并返回从聚合文档中提取的数值之间的最小值。这些值可以从文档中的特定数值字段中提取,也可以由提供的脚本生成。
Note:最小和最大聚合操作数据的双重表示。因此,当其绝对值大于2*53时,其结果可能是近似的。
计算所有文档的最小价格值:
POST /sales/_search?size=0
{
"aggs" : {
"min_price" : {
"min" : {
"field" : "price" } }
}
}
返回值:
{
...
"aggregations": {
"min_price": {
"value": 10.0} //聚合返回的名称
}
}
可以看出,聚合的名称(min_price以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.min.Min;
下面是一个如何创建聚合请求的示例:
MinAggregationBuilder aggregation = AggregationBuilders
.min("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
Min agg = response.getAggregations().get("agg");
double value = agg.getValue();
2、最大值聚合
最大值一个单值度量聚合,它跟踪并返回从聚合文档中提取的数值之间的最大值。这些值可以从文档中的特定数值字段中提取,也可以由提供的脚本生成。
Note:最小和最大聚合操作数据的双重表示。因此,当其绝对值大于2*53时,其结果可能是近似的。
计算所有文档的最大价格值:
POST /sales/_search?size=0
{
"aggs" : {
"max_price" : {
"max" : {
"field" : "price" } }
}
}
返回值:
{
...
"aggregations": {
"max_price": {
"value": 200.0} //聚合返回的名称
}
}
可以看出,聚合的名称(max_price以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.max.Max;
下面是一个如何创建聚合请求的示例:
MaxAggregationBuilder aggregation = AggregationBuilders
.max("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
Max agg = response.getAggregations().get("agg");
double value = agg.getValue();
3、平均值聚合
统计聚合是计算汇总文档中提取的数值平均值的单个值度量汇总。这些值可以从文档中的特定数值字段中提取,也可以由提供的脚本生成。
假设数据由代表考试成绩的文件组成(学生在0到100之间),我们可以用分数来表示他们的分数:
POST /exams/_search?size=0
{
"aggs" : {
"avg_grade" : {
"avg" : {
"field" : "grade" } }
}
}
以上聚合计算所有文档的平均级别。聚合类型为AVG,字段设置定义文档的数值字段,平均值将计算在。以上将返回以下内容:
{
...
"aggregations": {
"avg_grade": {
"value": 75.0}
}
}
可以看出,聚合的名称(avg_grade以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
下面是一个如何创建聚合请求的示例:
AvgAggregationBuilder aggregation = AggregationBuilders
.avg("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
Avg agg = response.getAggregations().get("agg");
double value = agg.getValue();
4、和聚合
和聚合是汇总汇总文档中提取的数值的单值度量汇总。这些值可以从文档中的特定数值字段中提取,也可以由提供的脚本生成。
假设数据由代表销售记录的文件组成,我们可以将所有帽子的销售价格与:
POST /sales/_search?size=0
{
"query" : {
"constant_score" : {
"filter" : {
"match" : {
"type" : "hat" }
}
}
},
"aggs" : {
"hat_prices" : {
"sum" : {
"field" : "price" } }
}
}
返回值:
{
...
"aggregations": {
"hat_prices": {
"value": 450.0}
}
}
可以看出,聚合的名称(intraday_return以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
下面是一个如何创建聚合请求的示例:
SumAggregationBuilder aggregation = AggregationBuilders
.sum("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
Sum agg = response.getAggregations().get("agg");
double value = agg.getValue();
5、值计数聚合
值计数聚合是一个单值度量聚合,它计算从聚合文档中提取的值的数量。这些值可以从文档中的特定字段中提取,也可以由提供的脚本生成。通常情况下,这个集合将用于与其他单值聚集一起。
例如,在计算AVG时,可能会对平均值的计算数感兴趣。
POST /sales/_search?size=0
{
"aggs" : {
"types_count" : {
"value_count" : {
"field" : "type" } }
}
}
返回值:
{
...
"aggregations": {
"types_count": {
"value": 7}
}
}
可以看出,聚合的名称(types_count以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
下面是一个如何创建聚合请求的示例:
ValueCountAggregationBuilder aggregation = AggregationBuilders
.count("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
ValueCount agg = response.getAggregations().get("agg");
long value = agg.getValue();
5、统计聚合
统计聚合一个多值度量聚合,对聚合文档中提起的数字型计算进行统计。这些值可以从文档中的特定字段中提取,也可以由提供的脚本生成。通常情况下,这个集合将用于与其他单值聚集一起。
例如,在计算AVG时,可能会对平均值的计算数感兴趣。
POST /sales/_search?size=0
{
"aggs" : {
"grades_stats" : {
"stats" : {
"field" : "grade" } }
}
}
以上聚合计算所有文档的等级统计信息。聚合类型是统计数据,字段设置定义了统计数据将被计算的文档的数值字段。以上将返回以下内容:
{
...
"aggregations": {
"grades_stats": {
"count": 2,
"min": 50.0,
"max": 100.0,
"avg": 75.0,
"sum": 150.0
}
}
}
可以看出,聚合的名称(grades_stats以上)也作为关键字在响应的结果中返回。
Java API调用
导入聚合定义类:
import org.elasticsearch.search.aggregations.metrics.stats.Stats;
下面是一个如何创建聚合请求的示例:
StatsAggregationBuilder aggregation = AggregationBuilders
.stats("agg")
.field("height");
SearchRequestBuilder srb = client.prepareSearch(indexName)
.setTypes(typeName);
srb.addAggregation(aggregation);
SearchResponse response = srb.execute().actionGet();
// sr is here your SearchResponse object
Stats agg = response.getAggregations().get("agg");
double min = agg.getMin();
double max = agg.getMax();
double avg = agg.getAvg();
double sum = agg.getSum();
long count = agg.getCount();
版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: