【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`:指定嵌套字段的路径。

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

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/894914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Uniapp-Vue3】创建DB schema数据表结构

右键uniCloud文件下的database文件&#xff0c;点击“新建DB schema”&#xff0c;选择模板&#xff0c;修改文件名&#xff0c;点击“创建” 创建完成后会出现对应的文件&#xff0c;进入该文件进行配置 对文件中的必填选项&#xff0c;用户权限&#xff0c;字段进行配置 其…

解决react中函数式组件usestate异步更新

问题&#xff1a;在点击modal组件确认后 调用后端接口&#xff0c;使用setstateone&#xff08;false&#xff09;使modal组件关闭&#xff0c;但是设置后关闭不了&#xff0c;在设置setstateone&#xff08;false&#xff09;前后打印出了对应的stateone都为true&#xff0c;但…

OpenAI 实战进阶教程 - 第六节: OpenAI 与爬虫集成实现任务自动化

爬虫与 OpenAI 模型结合&#xff0c;不仅能高效地抓取并分析海量数据&#xff0c;还能通过 NLP 技术生成洞察、摘要&#xff0c;极大提高业务效率。以下是一些实际工作中具有较高价值的应用案例&#xff1a; 1. 电商价格监控与智能分析 应用场景&#xff1a; 电商企业需要监控…

BFS算法篇——广度优先搜索,探索未知的旅程(上)

文章目录 前言一、BFS的思路二、BFS的C语言实现1. 图的表示2. BFS的实现 三、代码解析四、输出结果五、总结 前言 广度优先搜索&#xff08;BFS&#xff09;是一种广泛应用于图论中的算法&#xff0c;常用于寻找最短路径、图的遍历等问题。与深度优先搜索&#xff08;DFS&…

解决使用python提取word文档中所有的图片时图片丢失的问题

python解析word文档&#xff0c;提取文档中所有的图片并保存&#xff0c;并将原图位置用占位符替换。 问题描述 利用python-dox库解析word文档&#xff0c;并提取里面的所有图片时发现会出现一摸一样的图片只解析一次&#xff0c;导致图片丢失&#xff0c;数量不对的情况。 …

Swipe横滑与SwipeItem自定义横滑相互影响

背景 vue项目&#xff0c;H5页面&#xff0c;使用vant的组件库轮播组件<Swipe>&#xff0c;UI交互要求&#xff0c;在每个SwipeItem中有内容&#xff0c;可自横滑&#xff0c;查看列表内容 核心代码 <template><Swipeclass"my_swipe":autoplay&quo…

3. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--环境搭建

构建现代云原生应用程序时&#xff0c;开发环境的搭建至关重要。NET Aspire 作为一款专为云原生应用设计的开发框架&#xff0c;提供了一整套工具、模板和集成包&#xff0c;旨在简化分布式系统的构建和管理。开始项目初始化之前&#xff0c;确保开发环境的正确配置是成功的第一…

蓝耘智算平台使用DeepSeek教程

目录 一.平台架构与技术特点 二、DeepSeek R1模型介绍与优势 DeepSeek R1 模型简介 DeepSeek R1 模型优势 三.蓝耘智算平台使用DeepSeek教程 展望未来 耘元生代智算云是蓝耘科技推出的一款智算云平台有着以下特点&#xff1a; 一.平台架构与技术特点 基于 Kubernetes 原…

.net的一些知识点6

1.写个Lazy<T>的单例模式 public class SingleInstance{private static readonly Lazy<SingleInstance> instance new Lazy<SingleInstance>(() > new SingleInstance());private SingleInstance(){}public static SingleInstance Instace > instance…

1Panel应用推荐:WordPress开源博客软件和内容管理系统

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

前端开发架构师Prompt指令的最佳实践

前端开发架构师Prompt 提示词可作为系统提示词使用&#xff0c;可基于用户的需求输出对应的编码方案。 本次提示词偏向前端开发的使用&#xff0c;如有需要可适当修改关键词和示例。 推荐使用 Cursor 中作为自定义指令使用Cline 插件中作为自定义指令使用在力所能及的范围内使…

Linux在x86环境下制作ARM镜像包

在x86环境下制作ARM镜像包&#xff08;如qemu.docker&#xff09;&#xff0c;可以通过QEMU和Docker的结合来实现。以下是详细的步骤&#xff1a; 安装QEMU-user-static QEMU-user-static是一个静态编译的QEMU二进制文件&#xff0c;用于在非目标架构上运行目标架构的二进制文…

基于STM32设计的仓库环境监测与预警系统

目录 项目开发背景设计实现的功能项目硬件模块组成设计思路系统功能总结使用的模块的技术详情介绍总结 1. 项目开发背景 随着工业化和现代化的进程&#xff0c;尤其是在制造业、食品业、医药业等行业&#xff0c;仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐…

Redis主从同步流程?

目录 1. 建立连接 2. 全量同步(Full Sync) 3. 部分同步(Partial Sync) 4. 持续同步 5. 心跳检测 6. 复制偏移量(Replication Offset) 7. 复制积压缓冲区(Replication Backlog) 总结 Redis 主从同步 是通过复制(replication)实现的,主节点(master)将数据同…

PbootCMS 修改跳转提示,修改笑脸时间

在使用时&#xff0c;每次都提示这个&#xff1a; 修改方法&#xff1a; 修改跳转时间&#xff1a;找到 handle.php 文件编辑 &#xff0c;调整 setTimeout 函数的时间参数。 修改提示文字&#xff1a;编辑 handle.php 文件&#xff0c;修改提示文字的内容。 隐藏提示页面&am…

三星手机为何不大力扩展中国市场?

三星在中国市场的手机销量长期低迷&#xff0c;主要原因可以归结为以下几点&#xff0c;这也解释了为什么三星可能没有大力扩展中国市场的计划&#xff1a; 1. 市场竞争激烈 中国市场已经被华为、OPPO、vivo、小米和苹果等品牌牢牢占据&#xff0c;这些品牌在产品设计、本地化…

Elasticsearch:向量搜索的快速介绍

作者&#xff1a;来自 Elastic Valentin Crettaz 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜索&#xff08;也称为语义搜索&#xff09;的复杂性&#xff0c;以及它在 Elasticsearch 中的实现方式。 本文是三篇系列文章中的第一篇&#xff0c;将深入探讨向量搜…

kaggle视频行为分析1st and Future - Player Contact Detection

这次比赛的目标是检测美式橄榄球NFL比赛中球员经历的外部接触。您将使用视频和球员追踪数据来识别发生接触的时刻&#xff0c;以帮助提高球员的安全。两种接触&#xff0c;一种是人与人的&#xff0c;另一种是人与地面&#xff0c;不包括脚底和地面的&#xff0c;跟我之前做的这…

低成本训练的突破与争议:DeepSeek R1模型的新进展

摘要 近日&#xff0c;李飞飞团队宣称以50美元成本训练出性能超越o1/R1的DeepSeek R1模型&#xff0c;此说法引发广泛质疑。与此同时&#xff0c;上海交通大学本科生提出一种新的低成本推理方法&#xff0c;可能成为新热门选择。有观点认为&#xff0c;若认可50美元能训练出更优…

Sentinel的安装和做限流的使用

一、安装 Release v1.8.3 alibaba/Sentinel GitHubA powerful flow control component enabling reliability, resilience and monitoring for microservices. (面向云原生微服务的高可用流控防护组件) - Release v1.8.3 alibaba/Sentinelhttps://github.com/alibaba/Senti…