【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 中,嵌套聚合(nestedaggregation)的语法形式用于对嵌套字段(nestedfields)进行聚合操作。嵌套字段是 Elasticsearch 中的一种特殊字段类型,用于存储数组中的对象,这些对象需要独…...
虹科波形小课堂 | 三分钟掌握车辆相对压缩测试!不拆发动机、不测缸压就能判断故障缸!
不拆发动机、不测缸压,只测个电流也能知道哪个缸压缩有问题?没错!做个相对压缩测试,测下起动电流就行,简单又实用!今天,从原理到方法,几分钟教会你! 我们都知道…...
【玩转全栈】--创建一个自己的vue项目
目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架,旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念,使得开发者可以通过声明式的方式轻松管理数据和…...
基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题
前言(一些废话) 在看这篇文章的各位大佬,感谢你们留出几分钟时间,来看这个产品介绍,其实重点说实话,不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题,希望大佬们能给出一些建议。万…...
< 自用文儿 > 下载 MaxMind GeoIP Databases 对攻击的 IP 做 地理分析
起因 两个 VPM/VPS,安装了 fail2ban 去拦截密码穷举攻击。每天的记录都在增长,以前复制屏幕输出就行,一屏的内容还容易粘贴出来的。昨天已经过 500 条,好奇 fail2ban 是如何存储这些内容的?就发现它在使用 SQLite3 数…...
前端知识速记:重绘和回流
前端知识速记:重绘和回流 一、什么是重绘与回流 1. 重绘(Repaint) 重绘是指当元素的外观发生变化时,浏览器需要重新绘制这些元素。由于这些操作不会改变元素占据的空间,因此不需要进行回流。常见的重绘操作包括&…...
webrtc peerconnection_client peerconnection_server 连接失败问题解决 win10 win11
0 常见问题 (1) webrtc peerconnection_client 连接 peerconnection_server 无连接列表 (2)连接导致崩溃debug状态下因为这个断言 RTC_DCHECK_RUN_ON(&capture_checker_); 1 在 peerconnection\client\main.cc 当中 定义类 class CustomSock…...
【C++】STL——list的使用与底层实现
目录 💕1.带头双向链表List 💕2.list用法介绍 💕3.list的初始化 💕4.size函数与resize函数 💕5.empty函数 💕6.front函数与back函数 💕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” 错误 在深度学习和数据科学领域,PyTorch 是一个强大的工具,它允许我们以直观和灵活的方式处理张量(Tensor)。然而,即使…...
Jsoup库具体怎么用?
Jsoup 是一个非常强大的 Java 库,用于解析和操作 HTML 文档。它提供了丰富的功能,包括发送 HTTP 请求、解析 HTML 内容、提取数据、修改 HTML 元素等。以下将详细介绍 Jsoup 的基本用法和一些高级功能,帮助你更好地使用 Jsoup 进行网络爬虫开…...
python:如何播放 .spx 声音文件
.spx 是 Speex音频编解码器的文件扩展名,它是一种开源的、免费的音频编解码器,主要用于语音压缩和语音通信领域。spx 文件通常用于语音记录、VoIP应用、语音信箱等场景。 .mp3 是一种广泛使用的音频格式,它采用了有损压缩算法,可…...
HTML学习笔记(6)
利用dom操作实现,对一个表格的增删改查 代码如下: todolist.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …...
走向基于大语言模型的新一代推荐系统:综述与展望
HightLight 论文题目:Towards Next-Generation LLM-based Recommender Systems: A Survey and Beyond作者机构:吉林大学、香港理工大学、悉尼科技大学、Meta AI论文地址: https://arxiv.org/abs/2410.1974 基于大语言模型的下一代推荐系统&…...
【DeepSeek-R1 +1.5B】2060显卡ollama本地部署+open-webui界面使用
https://github.com/open-webui/open-webui Deepseek开源R1系列模型,纯RL助力推理能力大跃升! 2060显卡下使用deepseek-r1-1.5B deepseek开源小模型需要的显存(根据显存来选模型大小) ,图from: DeepSeek本地部署&…...
《翻转组件库之发布》
背景 继《翻转组件库之打包》_杨晓风-linda的博客-CSDN博客之后,组件库已经可以正常构建,那如何像elementUI等组件库那样,用npm安装,按照既定的用法使用即可呢?本篇便为你揭晓 资料相关 1、npm官方文档:…...
在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高
在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高 在深度学习中,样本不均衡问题是一个常见的挑战,尤其是在你的老虎机任务中,某些的中奖倍数较高而其他的中奖倍数较低。这种不均衡会导致模型偏向于高频样本(低中奖倍数的),…...
语言月赛 202311【基因】题解(AC)
》》》点我查看「视频」详解》》》 [语言月赛 202311] 基因 题目描述 有一个长度为 n n n 的字符串 S S S。其只包含有大写字母。 小 A 将 S S S 进行翻转后,得到另一个字符串 S ′ S S′。两个字符串 S S S 与 S ′ S S′ 对应配对。例如说,对…...
unity学习26:用Input接口去监测: 鼠标,键盘,虚拟轴,虚拟按键
目录 1 用Input接口去监测:鼠标,键盘,虚拟轴,虚拟按键 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 标准在线预览: 国家标准|GB/T 43698-2024 相关标准: &a…...
【Visual Leak Detector】跨平台 QT 项目集成 VLD 的便携式部署方案
1. Visual Leak Detector 与 QT 开发的那些事儿 做 C 开发的朋友应该都遇到过内存泄漏这个头疼的问题。特别是用 QT 开发跨平台应用时,随着项目规模扩大,内存管理就变得格外棘手。Visual Leak Detector(简称 VLD)这个轻量级工具简…...
音频处理避坑指南:二进制编码转换中的常见问题与解决方案
音频处理避坑指南:二进制编码转换中的常见问题与解决方案 音频处理在现代多媒体应用中扮演着重要角色,从语音识别到音乐制作,从流媒体传输到嵌入式设备音频播放,二进制编码转换都是核心技术环节。对于有一定经验的开发者而言&…...
深度解析:Element Plus架构设计与实现原理
深度解析:Element Plus架构设计与实现原理 【免费下载链接】element-plus 🎉 A Vue.js 3 UI Library made by Element team 项目地址: https://gitcode.com/GitHub_Trending/el/element-plus Element Plus作为Vue.js 3生态中最具影响力的企业级UI…...
五款颠覆传统的嵌入式电路仿真工具:从移动端到PC端的创新体验
1. 移动端电路仿真工具的崛起与创新 十年前我第一次接触电路仿真时,还需要背着厚重的笔记本电脑到处跑。现在掏出手机就能完成80%的基础仿真需求,这种变化简直像从DOS时代直接跳到了智能手机时代。移动端仿真工具最大的优势就是随时随地验证灵感——等公…...
CHORD-X构建自动化运维报告系统:服务器日志分析与日报生成
CHORD-X构建自动化运维报告系统:服务器日志分析与日报生成 最近和几个运维朋友聊天,发现他们每天都要花一两个小时写日报、周报。服务器状态、错误日志、性能趋势……这些数据分散在各个系统里,手动整理起来特别费劲。关键是,这种…...
如何用3dsconv解决3DS游戏格式兼容问题:从入门到精通的转换指南
如何用3dsconv解决3DS游戏格式兼容问题:从入门到精通的转换指南 【免费下载链接】3dsconv Python script to convert Nintendo 3DS CCI (".cci", ".3ds") files to the CIA format 项目地址: https://gitcode.com/gh_mirrors/3d/3dsconv …...
手把手教你学Simulink——基于Simulink的无差拍控制三相整流器高精度电流跟踪
目录 手把手教你学Simulink ——基于Simulink的无差拍控制三相整流器高精度电流跟踪 一、问题背景 二、系统建模与控制原理 1. 三相整流器拓扑 2. dq 轴数学模型(同步旋转坐标系) 3. 无差拍控制律推导 三、整体控制架构 四、Simulink 建模步骤 第一步:搭建三相整流…...
从手动压枪到智能辅助:探索罗技鼠标宏在PUBG中的进化之路
从手动压枪到智能辅助:探索罗技鼠标宏在PUBG中的进化之路 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 当你在绝地求生的激烈对枪中…...
ComfyUI-FramePackWrapper终极指南:3种AI视频生成模型加载方案深度对比
ComfyUI-FramePackWrapper终极指南:3种AI视频生成模型加载方案深度对比 【免费下载链接】ComfyUI-FramePackWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-FramePackWrapper 在AI视频生成领域,ComfyUI-FramePackWrapper是一款革…...
重塑机械键盘体验:ZMK固件的革新之旅与实践指南
重塑机械键盘体验:ZMK固件的革新之旅与实践指南 【免费下载链接】zmk ZMK Firmware Repository 项目地址: https://gitcode.com/gh_mirrors/zm/zmk 在机械键盘的世界里,固件如同键盘的灵魂,决定着它的响应速度、功能拓展性和个性化程度…...
