带你读《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并实现搜索。  
相关文章
|
前端开发
Vite——如何配置使用sass
Vite——如何配置使用sass
1069 0
|
2月前
|
人工智能 缓存 API
别再为 AI 调用超支头疼:Credits 配额,让每一笔消耗都透明可控
Credits 统一度量上线,消费者用量可度量、可约束。
462 22
|
2月前
|
人工智能 自然语言处理 安全
招投标垂直AI工具选型技术解析:垂直大模型+RAG架构的落地实践
本文剖析AI标书工具的技术分野:通用大模型存在领域理解浅、隐性风险漏判、内容幻觉等致命短板;而专业方案依托自研垂直大模型+RAG架构,深度融合招投标规则,实现高准确率结构化解析、100%事实可溯生成,并通过硬规则引擎与语义校验双轨风控、国密级私有化部署,保障央国企等高合规场景零废标、零泄密。
|
3月前
|
存储 运维 安全
云客服部署模式技术选型:SaaS 与私有化部署的架构对比与最佳实践
企业客服系统的部署模式选择,本质上是技术架构与业务需求的匹配问题。SaaS 云客服与私有化部署是当前主流的两种方案,在部署架构、多租户隔离、成本结构、运维模式、安全合规、迭代速度等技术维度上存在显著差异。本文基于 7 年企业通信系统架构落地经验,从纯技术视角深度拆解两种部署模式的核心差异,结合 300 + 企业项目的实际数据,重点分析小团队选型的常见技术误区,总结技术评估维度、落地最佳实践与常见踩坑点,为企业技术架构师做方案选型提供参考。
419 1
|
5月前
|
人工智能 算法 JavaScript
深度解析 AI 眼镜虚拟试戴技术
本方案提供高精度AI眼镜虚拟试戴API,融合亚像素级3D面部追踪、PBR物理渲染与实时几何校准技术,精准还原镜框贴合度、镜片反光/渐变/偏光效果及遮挡关系,支持全渠道快速集成,显著提升试戴真实感与转化率。(239字)
644 3
|
数据采集 JavaScript 前端开发
“所见即所爬”:使用Pyppeteer无头浏览器抓取动态壁纸
“所见即所爬”:使用Pyppeteer无头浏览器抓取动态壁纸
|
数据可视化 BI API
无缝对接云数据库:自定义报表生成工具在混合云环境下的部署指南
自定义报表生成工具通过拖拽设计、多数据源整合及自动化输出,帮助业务人员零代码创建个性化报表,解决传统工具灵活性不足、技术门槛高的问题。文章对比其与传统报表差异,列举行业应用场景(如财务、零售),并给出选型建议与主流工具(如FineReport、Power BI、板栗看板)的优劣势分析。
534 0
|
测试技术 开发者
基础测试用例
顾翔 作者相关精选 基础测试用例 关注作者 腾讯云 开发者社区 免费试用云直播,了解直播推流的操作方式 文档 建议反馈 控制台 登录/注册 首页 学习 活动 专区 圈层 工具 MCP广场 文章/答案/技术大牛 搜索 发布 社区首页 > 专栏 > 基础测试用例 基础测试用例
448 40
|
SQL 关系型数据库 MySQL
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!
这是一份详细的MySQL安装与配置教程,适合初学者快速上手。内容涵盖从下载到安装的每一步操作,包括选择版本、设置路径、配置端口及密码等。同时提供基础操作指南,如数据库管理、数据表增删改查、用户权限设置等。还介绍了备份恢复、图形化工具使用和性能优化技巧,帮助用户全面掌握MySQL的使用方法。附带常见问题解决方法,保姆级教学让你无忧入门!
1534 21
MySQL下载安装全攻略!小白也能轻松上手,从此数据库不再难搞!

热门文章

最新文章