1、聚合特殊处理
用途 | 语法 |
---|---|
缺失值处理 | “missing”: 10 |
最小聚合doc_count过滤 | “min_doc_count”: 10 |
指定百分比聚合统计区间范围 | “percents”: [95, 99, 99.9] |
百分比聚合数组方式返回 | “keyed”: false |
按照doc_count排序 | “order” : { “_count” : “asc” } |
按分组字段值排序 | “order” : { “_key” : “asc” } |
按照字典方式排序 | “order” : { “_term” : “asc” } |
include可以匹配出包含该值的文档 | “include” : “.sport.” |
exclude则排除包含该值的文档 | “exclude” : “water_.*” |
2、avg求平均值
求tradeDate在20201211到20201216期间,个股现价(priceNow)平均值。
逻辑:先按tradeDate进行数据查询(query),再按个股(securityId)进行分组聚合,再对每只个股聚合计算现价(priceNow)平均值。
{
"size":0,
"query":{
"bool":{
"must":[
{
"range":{
"tradeDate":{
"from":20201211,
"to":20201216,
"include_lower":true,
"include_upper":true
}
}
}
]
}
},
"aggs": {
"colors": {
"terms": {
"field": "securityId",
"order" : { "_count" : "asc" }
},
"aggs": {
"avg_price": {
"avg": {
"field": "priceNow"
}
}
}
}
}
}
3.另一种求平均值的方法
逻辑:求某交易日,大市值股票的平均价格。
{
"size":0,
"query":{
"bool":{
"must":[
{
"range":{
"tradeDate":{
"from":20201216,
"to":20201216,
"include_lower":true,
"include_upper":true
}
}
},
{
"range":{
"marketVal":{
"from":67868598798,
"to":null,
"include_lower":true,
"include_upper":true
}
}
}
]
}
},
"aggs": {
"avg_balance": {
"avg": {
"script": {
"source": "doc.priceNow.value"
}
}
}
}
}
4、最大值、最小值聚合
max
{
"aggs": {
"max_priceNow": {"max": {"field": "priceNow"}}
}
}
min
{
"aggs": {
"min_priceNow": {"min": {"field": "priceNow"}}
}
}
5、百分比聚合
求数值分布百分比
默认百分比范围:[1, 5, 25, 50, 75, 95, 99]。
可指定百分比范围
"percents": [95, 99, 99.9]
{
"size":0,
"aggs": {
"age_outlier": {
"percentiles": {
"field": "priceNow",
"percents": [95, 99, 99.9]
}
}
}
}
6、stats 数值概况统计
返回最大、最小、平均值、总和的统计情况
{
"aggs": {
"stats_priceNow": {"stats": {"field": "priceNow"}}
}
}
7、其他度量聚合
- a、sum,求和
- b、value_count,求值数量
- c、extended_stats 高级统计,比stats多4个统计结果: 平方和、方差、标准差、平均值加/减两个标准差的区间。
- d、percentile_ranks 统计 值小于等于指定值的文档占比
- e、cardinality 基数聚合 , 计算的是count(distinct) , 通常会有5%的错误率。
按度量结果排序:
{
"aggs" : {
"genders" : {
"terms" : {
"field" : "securityId",
"order" : { "avg_balance" : "desc" }
},
"aggs" : {
"avg_balance" : { "avg" : { "field" : "priceNow" } }
}
}
}
}