带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(7)

简介: 带你读《Elastic Stack 实战手册》之40:——3.4.2.21.Aggregations(7)

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(6) https://developer.aliyun.com/article/1229237


8、统计聚合 stats

 

属于多值聚合,对聚合文档中的数值字段进行:count, min, max, avg 和 sum 的统计。

 

1)基础用法

 

下定义了一个名称为 price_stats 类型为 stats 的聚合,并对 price 字段进行统计,该字段也将作为结果返回:


POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "field" : "price"
            }
        }
    }
}

返回结果:


{
  ...
  "aggregations" : {
    "price_stats" : {
      "count" : 9,
      "min" : 7849.46,
      "max" : 9999.2,
      "avg" : 8834.814444444444,
      "sum" : 79513.33
    }
  }
}

2)脚本

 

l 使用内置脚本:

POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "script" : {
                  "lang":"painless",
                  "source":"doc['price']" 
                }
            }
        }
    }
}

返回结果:

{
  ...
  "aggregations" : {
    "price_stats" : {
      "count" : 9,
      "min" : 7849.46,
      "max" : 9999.2,
      "avg" : 8834.814444444444,
      "sum" : 79513.33
    }
  }
}

l 使用 runtime field 方式:


GET order/_search?size=0
{
  "size": 0,
  "runtime_mappings": {
    "price.discount": {
      "type": "double",
      "script": """
        emit(doc['price'].value * 0.8)
      """
    }
  },
  "aggs": {
    "price_stats": {
      "stats": {
        "field": "price.discount"
      }
    }
  }
}

3)缺失值

 

默认情况下,对于文档中统计字段中缺失值的情况下,这部分文档会被自动忽略掉,我们可以通过参数 missing 指定值,以下例子将对于 price 字段没有值的文档,默认按照 0 进行处理:

 

POST /order/_search?size=0
{
  "aggs" : {
        "price_stats" : {
            "stats" : {
                "field" : "price",
                "missing" : 0
            }
        }
    }
}

9、扩展统计聚合 extended_stats

 

属于多值聚合,相比统计聚合多了平方和(sum_of_squares),方差(variance),标准差

(std_deviation),平均值+/-两个标准差的区间(std_deviation_bounds)。

 

1)基础用法


POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count"
            }
        }
    }
}

返回结果:


{
  ...
  "aggregations" : {
    "count_extended_stats" : {
      "count" : 10,
      "min" : 20.0,
      "max" : 30.0,
      "avg" : 24.6,
      "sum" : 246.0,
      "sum_of_squares" : 6162.0,
      "variance" : 11.039999999999964,
      "variance_population" : 11.039999999999964,
      "variance_sampling" : 12.266666666666627,
      "std_deviation" : 3.3226495451672244,
      "std_deviation_population" : 3.3226495451672244,
      "std_deviation_sampling" : 3.5023801430836468,
      "std_deviation_bounds" : {
        "upper" : 31.24529909033445,
        "lower" : 17.954700909665554,
        "upper_population" : 31.24529909033445,
        "lower_population" : 17.954700909665554,
        "upper_sampling" : 31.604760286167295,
        "lower_sampling" : 17.595239713832708
      }
    }
  }
}

其中 std_deviation_bounds 的使用,只有当数据是以正太分布的情况下,展示出来的指标才有意义,如果统计的数据偏左或者偏右,则返回的值将产生误导。

对于 std_deviation_bounds 若想控制显示多少个与均值+/-的标准偏差,可以通过 sigma 参数设置。sigma 可以是任何非负双精度值。当设置为0时,只会返回边界 upper 和 lower 边界的平均值。

POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count",
                "sigma" : 2.5
            }
        }
    }
}

2)缺失值

 

默认情况下,当文档中缺失计算字段值时,该文档将会被忽略,若我们希望使用这部分文档,可以通过设置 missing 参数。以下例子中,缺失字段的 price 将按照 0 来计算。


POST /order/_search?size=0
{
  "aggs" : {
        "count_extended_stats" : {
            "extended_stats" : {
                "field" : "count",
                "missing" : 0
            }
        }
    }
}

3)脚本

 

修正价格字段后,在进行聚合统计:


GET order/_search?size=0
{
  "runtime_mappings": {
    "price.discount": {
      "type": "double",
      "script": {
        "source": "emit(Math.max(200, doc['price'].value * params.correction))",
        "params": {
          "correction": 0.8
        }
      }
    }
  },
  "aggs": {
    "price_stats": {
      "extended_stats": { "field": "price.corrected" }
    }
  }
}

《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.21.Aggregations(8) https://developer.aliyun.com/article/1229233

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
消息中间件 存储 安全
RabbitMQ 常用 API(二)
RabbitMQ 常用 API(二)
199 0
|
机器人
钉钉markdown
钉钉markdown
1420 0
|
8月前
|
人工智能 运维 Serverless
OpenManus:开源版 Manus,无需邀请码,5 分钟极速体验!
OpenManus 是一款基于多智能体协作的开源自动化系统,能将复杂任务拆解为可执行子流程。通过多智能体机制分解任务、协调工具调用,实现代码执行、文件处理、网络搜索等复杂操作。本方案基于函数计算 FunctionAI 开发平台和阿里云百炼模型服务,提供一键部署方案,让企业无需过多运维投入即可获得灵活透明的智能任务处理能力。方案具备三大核心优势:Serverless 架构降本、实时反馈与透明化、模块化自由组合,支持快速接入多种功能模块。用户可通过简单步骤获取 API-KEY 并完成部署,体验 AI 自动化任务处理。
|
7月前
|
机器学习/深度学习 人工智能 运维
运维人别靠运气了,AI才是你预防故障的第二条命
运维人别靠运气了,AI才是你预防故障的第二条命
311 10
|
10月前
|
安全 Java C#
Unity多线程使用(线程池)
在C#中使用线程池需引用`System.Threading`。创建单个线程时,务必在Unity程序停止前关闭线程(如使用`Thread.Abort()`),否则可能导致崩溃。示例代码展示了如何创建和管理线程,确保在线程中执行任务并在主线程中处理结果。完整代码包括线程池队列、主线程检查及线程安全的操作队列管理,确保多线程操作的稳定性和安全性。
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
571 6
|
Linux SoC
【linux】【设备树】中断描述
【linux】【设备树】中断描述
288 0
|
弹性计算 运维 Cloud Native
偕行十年,阿里云助力众安保险用科技温暖每一张保单
应云而生的众安保险,其IT架构都搭建在阿里云上,云服务器ECS关键应用上的数据需要保护,需要简单易用、稳定性高的方案,助力保险业务的快速开发和上线。在经过全面充分地沟通评估后,众安保险采用了阿里云原生的数据备份方案加强数据安全。
480 3
|
监控 Shell Linux
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 实时监控系统性能 top命令 使用指南
【Shell 命令集合 系统管理 】⭐⭐⭐Linux 实时监控系统性能 top命令 使用指南
254 2

热门文章

最新文章