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

【Elasticsearch】nested聚合

在 Elasticsearch 中,嵌套聚合(`nested`aggregation)的语法形式用于对嵌套字段(`nested`fields)进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型,用于存储数组中的对象,这些对象需要独立于其父文档进行索引和查询。

以下是嵌套聚合的基本语法形式及其组成部分的详细说明:

基本语法

```json

{

  "aggs": {

    "<nested_aggregation_name>": {

      "nested": {

        "path": "<nested_field_path>"

      },

      "aggs": {

        "<sub_aggregation_name>": {

          "<sub_aggregation_type>": {

            "<sub_aggregation_body>"

          }

        }

      }

    }

  }

}

```

组成部分

1. `<nested_aggregation_name>`:

• 这是嵌套聚合的名称,由用户自定义,用于在查询结果中标识该聚合。

2. `nested`:

• 这是嵌套聚合的类型标识符,表明这是一个嵌套聚合。

3. `path`:

• 指定嵌套字段的路径。嵌套字段路径是从根文档到嵌套字段的完整路径。例如,如果嵌套字段是`resellers`,则路径为`"resellers"`。

4. `aggs`:

• 在嵌套聚合中,可以定义一个或多个子聚合。子聚合可以是任何类型的聚合(如`min`、`max`、`avg`、`terms`等),用于对嵌套文档进行进一步的分析。

5. `<sub_aggregation_name>`:

• 子聚合的名称,由用户自定义,用于在查询结果中标识该子聚合。

6. `<sub_aggregation_type>`:

• 子聚合的类型,例如`min`、`max`、`avg`、`terms`等。

7. `<sub_aggregation_body>`:

• 子聚合的具体定义,包含子聚合的字段和其他参数。

示例

以下是一个具体的嵌套聚合示例,假设我们有一个产品索引`products`,其中包含一个嵌套字段`resellers`,每个`reseller`有`reseller`(经销商名称)和`price`(价格)两个字段。

创建索引和映射

```json

PUT /products

{

  "mappings": {

    "properties": {

      "resellers": {

        "type": "nested",

        "properties": {

          "reseller": {

            "type": "keyword"

          },

          "price": {

            "type": "double"

          }

        }

      }

    }

  }

}

```

添加文档

```json

PUT /products/_doc/0?refresh

{

  "name": "LED TV",

  "resellers": [

    {

      "reseller": "companyA",

      "price": 350

    },

    {

      "reseller": "companyB",

      "price": 500

    }

  ]

}

```

嵌套聚合查询

1. 查询所有经销商的最低价格:

```json

GET /products/_search?size=0

{

  "aggs": {

    "resellers_agg": {

      "nested": {

        "path": "resellers"

      },

      "aggs": {

        "min_price": {

          "min": {

            "field": "resellers.price"

          }

        }

      }

    }

  }

}

```

• `resellers_agg`:嵌套聚合的名称。

• `nested`:指定这是一个嵌套聚合。

• `path`:指定嵌套字段的路径为`resellers`。

• `min_price`:子聚合的名称。

• `min`:子聚合的类型,用于计算最小值。

• `field`:指定聚合操作的字段为`resellers.price`。

2. 查询特定经销商的最低价格:

```json

GET /products/_search?size=0

{

  "aggs": {

    "resellers_agg": {

      "nested": {

        "path": "resellers"

      },

      "aggs": {

        "filter_reseller": {

          "filter": {

            "bool": {

              "filter": [

                {

                  "term": {

                    "resellers.reseller": "companyB"

                  }

                }

              ]

            }

          },

          "aggs": {

            "min_price": {

              "min": {

                "field": "resellers.price"

              }

            }

          }

        }

      }

    }

  }

}

```

• `filter_reseller`:过滤子聚合的名称。

• `filter`:过滤条件,用于筛选出`resellers.reseller`为`companyB`的文档。

• `term`:过滤条件的类型,用于匹配特定的值。

响应示例

1. 查询所有经销商的最低价格:

```json

{

  "aggregations": {

    "resellers_agg": {

      "doc_count": 2,

      "min_price": {

        "value": 350.0

      }

    }

  }

}

```

2. 查询特定经销商的最低价格:

```json

{

  "aggregations": {

    "resellers_agg": {

      "doc_count": 2,

      "filter_reseller": {

        "doc_count": 1,

        "min_price": {

          "value": 500.0

        }

      }

    }

  }

}

```

总结

嵌套聚合的语法形式包括以下关键部分:

• `nested`:指定这是一个嵌套聚合。

• `path`:指定嵌套字段的路径。

• 子聚合:在嵌套聚合中嵌套其他聚合操作,用于对嵌套文档进行进一步分析。

通过嵌套聚合,可以对嵌套字段中的文档进行复杂的聚合操作,从而满足复杂的查询需求。 

 

相关文章:

【Elasticsearch】nested聚合

在 Elasticsearch 中&#xff0c;嵌套聚合&#xff08;nestedaggregation&#xff09;的语法形式用于对嵌套字段&#xff08;nestedfields&#xff09;进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型&#xff0c;用于存储数组中的对象&#xff0c;这些对象需要独…...

虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!

不拆发动机、不测缸压&#xff0c;只测个电流也能知道哪个缸压缩有问题&#xff1f;没错&#xff01;做个相对压缩测试&#xff0c;测下起动电流就行&#xff0c;简单又实用&#xff01;今天&#xff0c;从原理到方法&#xff0c;几分钟教会你&#xff01; 我们都知道&#xf…...

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…...

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言&#xff08;一些废话&#xff09; 在看这篇文章的各位大佬&#xff0c;感谢你们留出几分钟时间&#xff0c;来看这个产品介绍&#xff0c;其实重点说实话&#xff0c;不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题&#xff0c;希望大佬们能给出一些建议。万…...

< 自用文儿 > 下载 MaxMind GeoIP Databases 对攻击的 IP 做 地理分析

起因 两个 VPM/VPS&#xff0c;安装了 fail2ban 去拦截密码穷举攻击。每天的记录都在增长&#xff0c;以前复制屏幕输出就行&#xff0c;一屏的内容还容易粘贴出来的。昨天已经过 500 条&#xff0c;好奇 fail2ban 是如何存储这些内容的&#xff1f;就发现它在使用 SQLite3 数…...

前端知识速记:重绘和回流

前端知识速记&#xff1a;重绘和回流 一、什么是重绘与回流 1. 重绘&#xff08;Repaint&#xff09; 重绘是指当元素的外观发生变化时&#xff0c;浏览器需要重新绘制这些元素。由于这些操作不会改变元素占据的空间&#xff0c;因此不需要进行回流。常见的重绘操作包括&…...

webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11

0 常见问题 (1) webrtc peerconnection_client 连接 peerconnection_server 无连接列表 &#xff08;2&#xff09;连接导致崩溃debug状态下因为这个断言 RTC_DCHECK_RUN_ON(&capture_checker_); 1 在 peerconnection\client\main.cc 当中 定义类 class CustomSock…...

【C++】STL——list的使用与底层实现

目录 &#x1f495;1.带头双向链表List &#x1f495;2.list用法介绍 &#x1f495;3.list的初始化 &#x1f495;4.size函数与resize函数 &#x1f495;5.empty函数 &#x1f495;6.front函数与back函数 &#x1f495;7.push_front,push_back,pop_front,pop_back函数…...

iOS 音频录制、播放与格式转换

iOS 音频录制、播放与格式转换:基于 AVFoundation 和 FFmpegKit 的实现 在 iOS 开发中,音频处理是一个非常常见的需求,比如录音、播放音频、音频格式转换等。本文将详细解读一段基于 AVFoundation 和 FFmpegKit 的代码,展示如何实现音频录制、播放以及 PCM 和 AAC 格式之间…...

【PyTorch】解决Boolean value of Tensor with more than one value is ambiguous报错

理解并避免 PyTorch 中的 “Boolean value of Tensor with more than one value is ambiguous” 错误 在深度学习和数据科学领域&#xff0c;PyTorch 是一个强大的工具&#xff0c;它允许我们以直观和灵活的方式处理张量&#xff08;Tensor&#xff09;。然而&#xff0c;即使…...

Jsoup库具体怎么用?

Jsoup 是一个非常强大的 Java 库&#xff0c;用于解析和操作 HTML 文档。它提供了丰富的功能&#xff0c;包括发送 HTTP 请求、解析 HTML 内容、提取数据、修改 HTML 元素等。以下将详细介绍 Jsoup 的基本用法和一些高级功能&#xff0c;帮助你更好地使用 Jsoup 进行网络爬虫开…...

python:如何播放 .spx 声音文件

.spx 是 Speex音频编解码器的文件扩展名&#xff0c;它是一种开源的、免费的音频编解码器&#xff0c;主要用于语音压缩和语音通信领域。spx 文件通常用于语音记录、VoIP应用、语音信箱等场景。 .mp3 是一种广泛使用的音频格式&#xff0c;它采用了有损压缩算法&#xff0c;可…...

HTML学习笔记(6)

利用dom操作实现&#xff0c;对一个表格的增删改查 代码如下&#xff1a; todolist.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …...

走向基于大语言模型的新一代推荐系统:综述与展望

HightLight 论文题目&#xff1a;Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构&#xff1a;吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址&#xff1a; https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...

【DeepSeek-R1 +1.5B】2060显卡ollama本地部署+open-webui界面使用

https://github.com/open-webui/open-webui Deepseek开源R1系列模型&#xff0c;纯RL助力推理能力大跃升&#xff01; 2060显卡下使用deepseek-r1-1.5B deepseek开源小模型需要的显存&#xff08;根据显存来选模型大小&#xff09; &#xff0c;图from: DeepSeek本地部署&…...

《翻转组件库之发布》

背景 继《翻转组件库之打包》_杨晓风-linda的博客-CSDN博客之后&#xff0c;组件库已经可以正常构建&#xff0c;那如何像elementUI等组件库那样&#xff0c;用npm安装&#xff0c;按照既定的用法使用即可呢&#xff1f;本篇便为你揭晓 资料相关 1、npm官方文档&#xff1a;…...

在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高

在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高 在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高而其他的中奖倍数较低。这种不均衡会导致模型偏向于高频样本(低中奖倍数的),…...

语言月赛 202311【基因】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后&#xff0c;得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说&#xff0c;对…...

unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键

目录 1 用Input接口去监测&#xff1a;鼠标&#xff0c;键盘&#xff0c;虚拟轴&#xff0c;虚拟按键 2 鼠标 MouseButton 事件 2.1 鼠标的基本操作 2.2 测试代码 2.3 测试情况 3 键盘Key事件 3.1 键盘的枚举方式 3.2 测试代码同上 3.3 测试代码同上 3.4 测试结果 4…...

GB/T 43698-2024 《网络安全技术 软件供应链安全要求》标准解读

一、43698-2024标准图解 https://mmbiz.qpic.cn/sz_mmbiz_png/rwcfRwCticvgeBPR8TWIPywUP8nGp4IMFwwrxAHMZ9Enfp3wibNxnfichT5zs7rh2FxTZWMxz0je9TZSqQ0lNZ7lQ/640?wx_fmtpng&fromappmsg 标准在线预览&#xff1a; 国家标准|GB/T 43698-2024 相关标准&#xff1a; &a…...

使用 Python + SQLAlchemy 创建知识库数据库(SQLite)—— 构建本地知识库系统的基础《一》

&#x1f4da; 使用 Python SQLAlchemy 创建知识库数据库&#xff08;SQLite&#xff09;—— 构建本地知识库系统的基础 &#x1f9e0; 一、前言 随着大模型技术的发展&#xff0c;越来越多的项目需要构建本地知识库系统来支持 RAG&#xff08;Retrieval-Augmented Generat…...

【后端】RPC

不定期更新。 定义 RPC 是 Remote Procedure Call 的缩写&#xff0c;中文通常翻译为远程过程调用。作用 简化分布式系统开发。实现微服务架构&#xff0c;便于模块化、复用。提高系统性能和可伸缩性。提供高性能通信、负载均衡、容错重试机制。 在现代分布式系统、微服务架构…...

ClusterRole 和 ClusterRoleBinding 的关系及使用

ClusterRole 和 ClusterRoleBinding 是 Kubernetes 中用于控制集群范围权限的两个重要资源&#xff0c;它们共同构成了 Kubernetes RBAC (基于角色的访问控制) 系统的核心部分。 两者的关系 ClusterRole 定义了一组权限规则&#xff0c;指定了可以对哪些资源执行哪些操作 Clu…...

【数据结构】6. 时间与空间复杂度

文章目录 一、算法效率1、算法的复杂度 二、时间复杂度1、时间复杂度的概念2、大O的渐进表示法3、常见时间复杂度计算1&#xff09;实例12&#xff09;实例23&#xff09;实例34&#xff09;实例45&#xff09;实例56&#xff09;实例67&#xff09;实例78&#xff09;实例8 三…...

day029-Shell自动化编程-计算与while循环

文章目录 1. read 交互式初始化变量1.1 案例-安装不同的软件1.2 案例-比较大小 2. 计算2.1 bc2.2 awk2.3 expr2.4 let2.5 案例-计算内存的空闲率2.6 案例-检查域名过期时间和https整数过期时间 3. 循环3.1 循环控制语句3.2 for循环-c语言格式3.3 while循环3.3.1 案例-猜数字3.3…...

GC1808:高性能24位立体声音频ADC芯片解析

1. 芯片简介 GC1808 是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于家庭影院、蓝牙音箱等场景。 核心特性 高精度&#xff1a;24位分辨率&#xff0c;…...

Linux基础命令which 和 find 简明指南

&#x1f3af; Linux which 和 find 命令简明指南&#xff1a;从入门到实用 &#x1f4c5; 更新时间&#xff1a;2025年6月7日 &#x1f3f7;️ 标签&#xff1a;Linux | which | find | 命令行 | 文件查找 文章目录 前言&#x1f31f; 一、Linux 命令的本质与 which、find 的作…...

【学习记录】在 Ubuntu 中将新硬盘挂载到 /home 目录的完整指南

文章目录 &#x1f4cb; 一、准备工作1. 备份重要数据2. 确认新硬盘设备信息 &#x1f6e0;️ 二、格式化新硬盘&#xff08;如未格式化&#xff09;1. 格式化为 ext4 文件系统&#xff08;推荐&#xff09; &#x1f501; 三、临时挂载并迁移数据1. 创建临时挂载点2. 挂载新硬…...

App使用webview套壳引入h5(三)——解决打包为app后在安卓机可物理返回但是在苹果手机无法测滑返回的问题

话不多说&#xff0c;直接放最终版本代码。 解决思路是&#xff1a;如果设备是ios设备在myH5中监听 touchstart 和touchend事件。 经过 App使用webview套壳引入h5的最终代码如下 myApp中&#xff0c;entry.vue代码如下&#xff1a; <template><view class"ent…...

【云安全】以Aliyun为例聊云厂商服务常见利用手段

目录 OSS-bucket_policy_readable OSS-object_public_access OSS-bucket_object_traversal OSS-Special Bucket Policy OSS-unrestricted_file_upload OSS-object_acl_writable ECS-SSRF 云攻防场景下对云厂商服务的利用大同小异&#xff0c;下面以阿里云为例 其他如腾…...