一、概述

  度量类型聚合主要针对的number类型的数据,需要ES做比较多的计算工作

参考向导:地址

import org.elasticsearch.search.aggregations.AggregationBuilders;
SearchResponse sr = node.client().prepareSearch()
.setQuery( /* your query */ )
.addAggregation( /* add an aggregation */ )
.execute().actionGet();

1.1、构建聚合

可以在聚合内定义子聚合。 聚合可以是度量聚合或桶聚合。

例如,这是一个由以下各项组成的3级聚合: term聚合(桶) 日期直方图聚合(桶) 平均聚合(度量)

SearchResponse sr = node.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();

1.2、度量聚合【metrics】

更多API

1)基本聚合:min max sum avg操作,一般作用于number类型字段上

        // 这里可以修改成 min max  sum avg
MinAggregationBuilder aggregation =
AggregationBuilders
.min("号码")
.field("num"); SearchResponse sr = client.prepareSearch()
.addAggregation(aggregation
)
.execute().actionGet();
Min aaa = sr.getAggregations().get("号码");
double value = aaa.getValue();
System.out.println("号码:"+value);

2)综合聚合

StatsAggregationBuilder aggregation =
AggregationBuilders
.stats("agg")
.field("height");

使用

// 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();

3)扩展综合聚合

ExtendedStatsAggregationBuilder aggregation =
AggregationBuilders
.extendedStats("agg")
.field("height");

使用

// sr is here your SearchResponse object
ExtendedStats 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();
double stdDeviation = agg.getStdDeviation();
double sumOfSquares = agg.getSumOfSquares();
double variance = agg.getVariance();

4)count聚合

ValueCountAggregationBuilder aggregation =
AggregationBuilders
.count("agg")
.field("height");

使用

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

5)百分比聚合

PercentilesAggregationBuilder aggregation =
AggregationBuilders
.percentiles("agg")
.field("height");

默认会提供百分比区间。也可以自定义

PercentilesAggregationBuilder aggregation =
AggregationBuilders
.percentiles("agg")
.field("height")
.percentiles(1.0, 5.0, 10.0, 20.0, 30.0, 75.0, 95.0, 99.0);

使用

import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile;
import org.elasticsearch.search.aggregations.metrics.percentiles.Percentiles;
// 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);
}

结果展示

percent [1.0], value [0.814338896154595]
percent [5.0], value [0.8761912455821302]
percent [25.0], value [1.173346540141847]
percent [50.0], value [1.5432023318692198]
percent [75.0], value [1.923915462033674]
percent [95.0], value [2.2273644908535335]
percent [99.0], value [2.284989339108279]

6)百分比行列

示例

PercentileRanksAggregationBuilder aggregation =
AggregationBuilders
.percentileRanks("agg")
.field("height")
.values(1.24, 1.91, 2.22);

使用

import org.elasticsearch.search.aggregations.metrics.percentiles.Percentile;
import org.elasticsearch.search.aggregations.metrics.percentiles.PercentileRanks;
// sr is here your SearchResponse object
PercentileRanks 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);
}

结果

percent [29.664353095090945], value [1.24]
percent [73.9335313461868], value [1.91]
percent [94.40095147327283], value [2.22]

7)基数聚合

CardinalityAggregationBuilder aggregation =
AggregationBuilders
.cardinality("agg")
.field("tags");

使用

import org.elasticsearch.search.aggregations.metrics.cardinality.Cardinality;
// sr is here your SearchResponse object
Cardinality agg = sr.getAggregations().get("agg");
long value = agg.getValue();

更多操作:地址

010-elasticsearch5.4.3【四】-聚合操作【一】-度量聚合【metrics】-min、max、sum、avg、count的更多相关文章

  1. GROUP BY 聚合函数(max min sum avg count) 和HAVING的 使用

    重新复习一下这个都源自于我经常需要查的一个需求 “要找到表里面 出现了两次或者三次的某个字段” 现在假设有一张表字段是 +----+---------------------+------------ ...

  2. JDK1.8聚合操作

    在java8 JDK包含许多聚合操作(如平均值,总和,最小,最大,和计数),返回一个计算流stream的聚合结果.这些聚合操作被称为聚合操作.JDK除返回单个值的聚合操作外,还有很多聚合操作返回一个c ...

  3. Lambda表达式-聚合操作

    文章参考自博客:https://www.cnblogs.com/franson-2016/p/5593080.html 以及学习网站:how2java.cn 1.传统方式和聚合操作遍历数据的不同 传统 ...

  4. Java自学-集合框架 聚合操作

    聚合操作 步骤 1 : 聚合操作 JDK8之后,引入了对集合的聚合操作,可以非常容易的遍历,筛选,比较集合中的元素. 像这样: String name =heros .stream() .sorted ...

  5. 011-elasticsearch5.4.3【四】-聚合操作【二】-桶聚合【bucket】过滤、嵌套、反转、分组、排序、范围

    一.概述 bucketing(桶)聚合:划分不同的“桶”,将数据分配到不同的“桶”里.非常类似sql中的group语句的含义. metric既可以作用在整个数据集上,也可以作为bucketing的子聚 ...

  6. OpenStack/Gnocchi简介——时间序列数据聚合操作提前计算并存储起来,先算后取的理念

    先看下 http://www.cnblogs.com/bonelee/p/6236962.html 这里对于环形数据库的介绍,便于理解归档这个操作! 转自:http://blog.sina.com.c ...

  7. Elasticsearch学习(4) spring boot整合Elasticsearch的聚合操作

    之前已将spring boot原生方式介绍了,接下将结介绍的是Elasticsearch聚合操作.聚合操作一般来说是解决一下复杂的业务,比如mysql中的求和和分组,由于博主踩的坑比较多,所以博客可能 ...

  8. Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析

    Linq聚合操作之Aggregate,Count,Sum,Distinct源码分析 一:Linq的聚合运算 1. 常见的聚合运算:Aggregate,Count, Sum, Distinct,Max, ...

  9. MongoDB - 增删改查及聚合操作

    目录 MongoDB - 增删改查及聚合操作 一. 数据库操作(database) 1. 创建及查看库 2. 删除库 二. 集合collectionc=操作(相当于SQL数据库中的表table) 1. ...

随机推荐

  1. STL容器概述

    STL容器 1.容器概述 1.1.容器分类 1.1.1.顺序容器:提供对元素序列的访问,顺序容器为元素连续分配内存或将元素组织为链表,元素的类型是容器成员value_type. 顺序容器 说明 vec ...

  2. 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已安装则启用它。

    您的浏览器没有获得Java Virtual Machine(JVM)支持.可能由于没有安装JVM或者已安装但是没有启用.请安装JVM1.5或者以上版本,如果已安装则启用它. https://www.j ...

  3. listen - listen for connections on a socket 在一个套接字上倾听连接

    SYNOPSIS 概述 #include <sys/socket.h> int listen(int s, int backlog); DESCRIPTION 描述 在接收连接之前,首先要 ...

  4. python函数带不带括号的问题

    Python带括号返回的是该函数的返回值 不带括号返回的是该函数的位置信息等

  5. ID 学习二 FILE I/O

    TCP CONNECT 此文件io工具用于打开和另外一台电脑的tcp/ip连接 电脑(本地网络.ip地址或者完整主机名称) Inputs Server ID 想要连接的主机名称或者IP地址 TCP P ...

  6. sed 流编辑命令

    1.命令功能 sed非交互式的流编辑器,sed不会修改源文件内容,除非重定向来保存输出结果:默认情况下所有的输出行都将被打印到屏幕上. 2.语法格式 sed  [option]  {script-on ...

  7. The Battle of Chibi(数据结构优化dp,树状数组)

    The Battle of Chibi Cao Cao made up a big army and was going to invade the whole South China. Yu Zho ...

  8. linux中查找文件

    locate arm-none-linux-gnueabi-gcc//有效 find / -name "arm-none-linux-gnueabi-gcc"

  9. MySQL免安装版 配置

    1. MySQL官方网址:https://dev.mysql.com/downloads/mysql/ 2. 将下载文件解压到一个文件夹:D:\AZ\ 3. 配置环境变量:Path:D:\AZ\mys ...

  10. 【u-boot-2018.05】make配置过程分析

    https://blog.csdn.net/q_z_r_s/article/details/80718518 从u-boot-2014.10版本引入Kbuild系统之后,Makefile的管理和组织跟 ...