当前位置: 首页 > news >正文

ES from size聚合查询10000聚合查询,是每个分片先聚合,再统计。还是所有节点查询1万条后,再聚合

在 Elasticsearch 中,聚合查询 的执行过程是 分布式 的,Elasticsearch 会先在每个分片(shard)上执行本地聚合,然后再在协调节点(coordinating node)上对所有分片的聚合结果进行 全局汇总。具体过程如下:


1. 聚合查询的执行过程

1.1 分片级别的本地聚合

  • 查询分发:当你在 Elasticsearch 中执行一个聚合查询时,协调节点会将查询分发到索引的每个分片(shard)上。

  • 本地聚合:每个分片会在本地对匹配的文档执行聚合操作(例如求和、平均值、分组等)。每个分片只会处理自己分片内的数据。

  • 返回中间结果:每个分片将本地的聚合结果返回给协调节点。

1.2 协调节点的全局汇总

  • 结果收集:协调节点会从所有分片中收集聚合结果。

  • 全局汇总:协调节点会对所有分片的聚合结果进行全局汇总。例如:

    • 如果是 求和(sum),协调节点会将所有分片的求和结果相加。

    • 如果是 平均值(avg),协调节点会计算所有分片的平均值。

    • 如果是 分组(terms),协调节点会合并所有分片的分组结果,并重新排序。

  • 返回最终结果:协调节点将最终的聚合结果返回给客户端。


2. 具体示例

假设你执行以下聚合查询:

json

复制

POST /your_index/_search
{
  "size": 0,
  "aggs": {
    "total_sales": {
      "sum": {
        "field": "sales"
      }
    }
  }
}

执行步骤

  1. 查询分发

    • 假设索引有3个分片(shard1, shard2, shard3)。

    • 协调节点将查询分发到 shard1、shard2 和 shard3。

  2. 本地聚合

    • shard1 计算本地的 sales 字段总和,假设结果为 1000。

    • shard2 计算本地的 sales 字段总和,假设结果为 1500。

    • shard3 计算本地的 sales 字段总和,假设结果为 2000。

  3. 全局汇总

    • 协调节点收集所有分片的聚合结果:1000(shard1) + 1500(shard2) + 2000(shard3)。

    • 协调节点计算全局总和:1000 + 1500 + 2000 = 4500。

  4. 返回结果

    • 协调节点将最终结果 4500 返回给客户端。


3. 关于 from 和 size 的影响

在聚合查询中,from 和 size 参数通常用于控制返回的 文档数量,而不是聚合结果的数量。例如:

json

复制

POST /your_index/_search
{
  "from": 0,
  "size": 10000,
  "aggs": {
    "total_sales": {
      "sum": {
        "field": "sales"
      }
    }
  }
}
  • from 和 size 的作用

    • from=0, size=10000 表示返回前10,000条文档。

    • 聚合操作是基于这10,000条文档进行的。

  • 执行过程

    • 每个分片会先根据 from 和 size 参数返回匹配的文档(最多10,000条)。

    • 然后在这些文档上执行本地聚合。

    • 协调节点会汇总所有分片的聚合结果。


4. 分片聚合 vs 全局聚合

  • 分片聚合:每个分片只处理自己分片内的数据,返回中间结果。

  • 全局聚合:协调节点对所有分片的中间结果进行汇总,返回最终结果。

注意事项

  1. 数据分布:聚合结果的准确性依赖于数据在分片中的分布。如果数据分布不均匀,可能会导致聚合结果不准确。

  2. 性能问题:如果聚合查询涉及大量数据,可能会导致协调节点的内存和 CPU 资源消耗过高。

  3. size 参数:在聚合查询中,size 参数通常用于控制返回的文档数量,而不是聚合结果的数量。如果需要控制聚合结果的数量,可以使用 terms 聚合的 size 参数。


5. 总结

  • 聚合查询的执行过程

    • 每个分片先执行本地聚合。

    • 协调节点对所有分片的聚合结果进行全局汇总。

  • from 和 size 的作用

    • 控制返回的文档数量,而不是聚合结果的数量。

  • 性能优化

    • 避免在聚合查询中使用过大的 from 和 size 参数。

    • 使用 composite 聚合或 bucket_sort 聚合对聚合结果进行分页。

通过理解 Elasticsearch 的分布式聚合机制,可以更好地优化查询性能,避免资源浪费。

相关文章:

  • Linux服务器防火墙白名单访问策略的配置示例
  • 电子电气架构 --- 汽车行业技术变革
  • 2023-Moectf-wp
  • EtherCAT总线学习笔记
  • 【Python】基础语法三
  • 微服务学习(2):实现SpringAMQP对RabbitMQ的消息收发
  • 普通人高效使用DeepSeek指南?
  • 复现NC图表:二分图 (bipartite plot) 网络绘制(三种方法)-应用于细胞互作受配体展示-调控网络展示等等
  • Windows安装sql server2017
  • GitCode 助力 JeeSite:开启企业级快速开发新篇章
  • week 3 - More on Collections - Lecture 3
  • 线反转法实现矩形键盘按键识别
  • QT播放视频保持视频宽高比消除黑边
  • 基于javaweb的SSM+Maven幼儿园管理系统设计和实现(源码+文档+部署讲解)
  • brew search报错,xcrun:error:invalid active developer path CommandLineTools
  • 通俗易懂的分类算法之决策树详解
  • 使用Simulink中的IsUpdated获取Rport的更新状态
  • 当我删除word文件时无法删除,提示:操作无法完成,因为已在Microsoft Word中打开
  • 一、舵机模块的分析与使用
  • flowable使用
  • 南京做网站找哪家好/推广神器
  • vue框架做的网站/搜狗搜索引擎优化指南
  • 东莞建设公司网站/制作网页
  • 有那个网站做简历模板/手机关键词seo排名优化
  • 常用的软件下载网站/百度公司介绍
  • 网站如何做301跳转/武汉seo优化代理