【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.pswp.cn/news/894914.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/894914.shtml
英文地址,請注明出處:http://en.pswp.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…