Elasticsearch8.x聚合查詢全面指南:從理論到實戰

聚合查詢的概念

  • 聚合查詢(Aggregation Queries)是Elasticsearch中用于數據匯總和分析的查詢類型。
  • 它不同于普通的查詢,而是用于執行各種聚合操作,如計數、求和、平均值、最小值、最大值、分組等。

聚合查詢的分類

分桶聚合(Bucket Aggregations)

  • 類似于SQL中的GROUP BY操作,根據指定的條件對數據進行分組統計。

  • 可以進行嵌套分桶,即在一個分桶的基礎上再進行細分。

  • 示例:按照手機的品牌進行分桶統計數量,再在小米手機的分桶基礎上按照檔次進行二次分桶。

  • 語法格式

GET /index/_search
{"size": 0,"aggs": {"aggregation_name": {"bucket_type": {"bucket_options": {"bucket_option_name": "bucket_option_value",...},"aggs": {"sub_aggregation_name": {"sub_aggregation_type": {"sub_aggregation_options": {"sub_aggregation_option_name": "sub_aggregation_option_value",...}}}}}}}
}
#解析
# index: 替換為要執行聚合查詢的索引名稱。
# aggregation_name: 替換為自定義的聚合名稱。
# bucket_type: 替換為特定的桶聚合類型(如 terms、date_histogram、range 等)。
# bucket_option_name 和 bucket_option_value: 替換為特定桶聚合選項的名稱和值。
?
# sub_aggregation_name: 替換為子聚合的名稱。
# sub_aggregation_type: 替換為特定的子聚合類型(如 sum、avg、max、min 等)。
# sub_aggregation_option_name 和 sub_aggregation_option_value: 替換為特定子聚合選項的名稱和值

指標聚合(Metrics Aggregations)

  • 主要用于計算數值字段的統計信息,如平均值、最大值、最小值、求和、去重計數等。

  • 示例:計算某個班級、某個學科的最高分、最低分等。

  • 語法格式

GET /index/_search  
{"size": 0,"aggs": {"aggregation_name": {"aggregation_type": {"aggregation_field": "field_name"// 可選參數}}// 可以添加更多的聚合}
}
?
# 解析
#index:要執行聚合查詢的索引名稱。
#size: 設置為 0 來僅返回聚合結果,而不返回實際的搜索結果,這里將hits改為0表示返回的原始數據變為0
#aggs:指定聚合操作的容器。
?
#aggregation_name:聚合名稱,可以自定義。
#aggregation_type:聚合操作的類型,例如 terms、avg、sum 等。
#aggregation_field:聚合操作的目標字段,對哪些字段進行聚合

聚合查詢的特點

  • 嵌套性:聚合查詢支持嵌套,即一個聚合內部可以包含別的子聚合,實現復雜的數據挖掘和統計需求。

  • 靈活性:可以用于多種場景的數據分析,滿足各種業務需求。

  • 高效性:Elasticsearch的聚合查詢基于倒排索引和優化的數據結構,使得聚合操作能夠高效地執行。

常見聚合用途及應用場景

聚合指標(Aggregation Metrics):

- Avg Aggregation:計算文檔字段的平均值。- Sum Aggregation:計算文檔字段的總和。- Min Aggregation:找到文檔字段的最小值。- Max Aggregation:找到文檔字段的最大值。

聚合桶(Aggregation Buckets):

  • Terms Aggregation:基于字段值將文檔分組到不同的桶中。
    • 語法格式
GET /index/_search
{"size": 0,"aggs": {"aggregation_name": {"bucket_type": {"bucket_options": {"bucket_option_name": "bucket_option_value",...},"aggs": {"sub_aggregation_name": {"sub_aggregation_type": {"sub_aggregation_options": {"sub_aggregation_option_name": "sub_aggregation_option_value",...}}}}}}}
}
#解析
#index: 替換為要執行聚合查詢的索引名稱。
#aggregation_name: 替換為自定義的聚合名稱。
#bucket_type: 替換為特定的桶聚合類型(如 terms、date_histogram、range 等)。
#bucket_option_name 和 bucket_option_value: 替換為特定桶聚合選項的名稱和值。
?
#sub_aggregation_name: 替換為子聚合的名稱。
#sub_aggregation_type: 替換為特定的子聚合類型(如 sum、avg、max、min 等)。
#sub_aggregation_option_name 和 sub_aggregation_option_value: 替換為特定子聚合選項的名稱和值
  • Date Histogram Aggregation:按日期/時間字段創建時間間隔的桶。
    • 語法格式
GET /index/_search
{"size": 0,"aggs": {"date_histogram_name": {"date_histogram": {"field": "date_field_name","interval": "interval_expression"},"aggs": {"sub_aggregation": {"sub_aggregation_type": {}}}}}
}
?
#解析
#index:替換為要執行聚合查詢的索引名稱。
#date_histogram_name:替換為自定義的 date_histogram 聚合名稱。
#date_field_name:替換為要聚合的日期類型字段名。
#interval_expression:指定用于分桶的時間間隔。時間間隔可以是一個有效的日期格式(如 1d、1w、1M),也可以是一個數字加上一個時間單位的組合(如 7d 表示 7 天,1h 表示 1 小時)。
#sub_aggregation:指定在每個日期桶內進行的子聚合操作。
#sub_aggregation_type:替換單獨子聚合操作的類型,可以是任何有效的子聚合類型。
  • Range Aggregation:根據字段值的范圍創建桶。
    • 語法格式
GET /index/_search
{"size": 0,"aggs": {"range_name": {"range": {"field": "field_name","ranges": [{ "key": "range_key_1", "from": from_value_1, "to": to_value_1 },{ "key": "range_key_2", "from": from_value_2, "to": to_value_2 },...]},"aggs": {"sub_aggregation": {"sub_aggregation_type": {}}}}}
}
?
#解析
# index:替換為要執行聚合查詢的索引名稱。
# range_name:替換為自定義的 range 聚合名稱。
# field_name:替換為要聚合的字段名。
# ranges:指定范圍數組,每個范圍使用 key、from 和 to 參數進行定義。
# key:范圍的唯一標識符。
# from:范圍的起始值(包含)。
# to:范圍的結束值(不包含)。
# sub_aggregation:指定在每個范圍內進行的子聚合操作。
# sub_aggregation_type:替換單獨子聚合操作的類型,可以是任何有效的子聚合類型。

Query DSL指標聚合多案例介紹實戰

創建索引

PUT /sales
{"mappings": {"properties": {"id":{"type":"keyword"},"product": {"type": "keyword"},"sales": {"type": "integer"}}}
}

批量插入數據

POST /sales/_bulk
{"index": {}}
{"product": "iPhone", "sales": 4}
{"index": {}}
{"product": "Samsung", "sales": 60}
{"index": {}}
{"product": "iPhone", "sales": 100}
{"index": {}}
{"product": "Samsung", "sales": 80}
{"index": {}}
{"product": "小米手機", "sales": 50}
{"index": {}}
{"product": "小米手機", "sales": 5000}
{"index": {}}
{"product": "小米手機", "sales": 200}

指標聚合實戰

根據商品名稱分組
GET /sales/_search
{"aggs": {"phone_group": {"terms": {"field": "product"}}}
}

在這里插入圖片描述

計算每組的銷售總量,使用terms聚合和sum聚合來
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"      },"aggs": {"total_salers": {"sum": {"field": "sales"}}}}}
}

在這里插入圖片描述

計算總和
GET /sales/_search
{"aggs": {"sum_sales": {"sum": {"field": "sales"}}}
}

在這里插入圖片描述

計算不同品牌的平均值
GET /sales/_search
{"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"avg_sales": {"avg": {"field": "sales"}}}}}
}

在這里插入圖片描述

計算總商品的平均值
GET /sales/_search
{"size": 0,"aggs": {"avg_sales": {"avg": {"field": "sales"}}}
}

在這里插入圖片描述

計算不同品牌的手機的最高低價
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"max_sales": {"max": {"field": "sales"}}}}}
}
?
?
GET /sales/_search
{"size": 0,"aggs": {"product_sales": {"terms": {"field": "product"},"aggs": {"max_sales": {"min": {"field": "sales"}}}}}
}

在這里插入圖片描述

查找最大最小值
GET /sales/_search
{"size": 0,"aggs": {"max_sales": {"max": {"field": "sales"}}}
}
?
GET /sales/_search
{"size": 0,"aggs": {"max_sales": {"min": {"field": "sales"}}}
}

在這里插入圖片描述

Query DSL 桶聚合Terms案例實戰

使用 terms 聚合查詢將圖書按銷售數量進行分桶,并獲取每個分桶內的銷售數量總和。
GET /book_sales/_search
{"size": 0,"aggs": {"book_buckets": {"terms": {"field": "book_title"},"aggs": {"total_sales": {"sum": {"field": "sales_count"}}}}}
}

在這里插入圖片描述

Query DSL 桶聚合Date Histogram介紹和案例實戰

使用 date_histogram 聚合查詢將訂單按日期進行分桶,并計算每個分桶內的訂單金額總和
GET /book_sales/_search
{"size": 0,"aggs": {"saler_per_day": {"date_histogram": {"field": "date","calendar_interval": "day","format": "yyyy-MM-dd"},"aggs": {"total_saler": {"sum": {"field": "sales_count"}}}}}
}

在這里插入圖片描述

Query DSL 桶聚合Range介紹和案例實戰

使用 range 聚合查詢將商品按價格范圍進行分桶,并計算每個分桶內的商品數量

GET /book_sales/_search
{"size": 0,"aggs": {"sales_ranges": {"range": {"field": "sales_count","ranges": [{"to": 50},{"from": 50,"to": 100},{"from": 100,"to": 200},{"from": 200}]}}}
}

在這里插入圖片描述

通過本篇文章的深入解析,我們不僅掌握了Elasticsearch聚合查詢的基本概念與分類,還通過一系列實戰案例學習了如何有效地運用分桶聚合與指標聚合進行數據挖掘與統計分析。從簡單的平均值、求和計算到復雜的多層級分桶與時間序列分析,Elasticsearch的聚合功能展現了其在大規模數據處理與復雜業務分析場景中的強大能力。
記住,無論是進行市場趨勢分析、用戶行為洞察還是日志數據的深入挖掘,合理設計聚合查詢都是解鎖數據價值的關鍵。隨著實踐的深入,不斷探索高級特性與優化策略,你將能更加靈活高效地應對各種數據分析挑戰。
總之,Elasticsearch聚合查詢是通往數據智能分析的重要橋梁,它不僅能夠幫助我們快速洞察數據分布特征,還能驅動業務決策更加精準高效。希望本指南能成為你掌握Elasticsearch聚合查詢技能的堅實基石,開啟數據驅動決策的新篇章。
更多精彩內容,請關注以下公眾號
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36685.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36685.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36685.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos7 安裝單機MongoDB

centos7安裝單機 yum 安裝 1、配置yum源 vim /etc/yum.repos.d/mongodb.repo [mongodb-org-7.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…

【監控】3.配置 Grafana 以使用 Prometheus 數據源

1 訪問 Grafana 打開瀏覽器,訪問 http://localhost:3000(默認端口)。使用默認的用戶名和密碼 admin/admin 登錄。 2 添加 Prometheus 數據源 進入 Grafana 儀表板,點擊左側菜單中的“Configuration” -> “Data Sources”。…

未來已來,如何打造智慧養殖場?

近年來,國家出臺了一系列扶持政策,以促進養殖行業高質量發展,推動行業轉型升級。在國家政策和市場需求的雙重驅動下,養殖行業正迎來前所未有的發展機遇。智慧養殖以其高效、智能和可持續的特點,正逐步取代傳統養殖方式…

6.26.4.1 基于交叉視角變換的未配準醫學圖像多視角分析

1. 介紹 許多醫學成像任務使用來自多個視圖或模式的數據,但很難有效地將這些數據結合起來。雖然多模態圖像通常可以在神經網絡中作為多個輸入通道進行配準和處理,但來自不同視圖的圖像可能難以正確配準(例如,[2])。因此,大多數多視…

電影搜索筆記

1 字幕組 2 磁力搜索 2.1 磁力大全 http://7809.org/cldq.html

吳恩達2022機器學習專項課程C2W3:2.27 選修_數據傾斜

目錄 處理不平衡數據集1.分類需求描述2.計算精確率和召回率 權衡精確率和召喚率1.手動調整閾值2.F1分數 總結 處理不平衡數據集 1.分類需求描述 如果你在處理一個機器學習應用,其中正例和負例的比例(用于解決分類問題)非常不平衡&#xff0…

多域名微信公眾號獲取授權(前后端分離,后端獲取微信用戶openid)

1.通過后端站點http://b.cn 跳轉至前端鏈接 http://aa.cn/v1/demo/demo public function index(){$identinput(ident);$this->redirect(http://aa.cn/?ident.$ident);}2.前端http://aa.cn 再跳轉到后端 https://c.com(此域名綁定微信公眾號:需備案) onShow() {console.lo…

數據庫怎么同步

數據庫要怎么同步呢,有很多方法,看你用什么數據庫,如果是Sqlserver,你要數據庫同步,那么可以使用自帶的訂閱發布,訂閱發布應該是不錯的方法,但是我上次要配置雙向同步,它的對等發布好像沒部署成…

Ansible-綜合練習-生產案例

斌的招兒 網上教程大多都是官網模板化的教程和文檔,這里小斌用自己實際生產環境使用的例子給大家做一個詳解。涉及到一整套ansible的使用,對于roles的使用,也僅涉及到tasks和files目錄,方便大家快速上手并規范化管理。 0.環境配置…

想關掉一個qwidget是用deleteLater還是用close

在Qt中關閉一個QWidget可以選擇使用close()或者deleteLater()兩種方法,根據具體需求,兩者有不同的適用場景: close()方法: close()會觸發QWidget的closeEvent,也就是說,它會產生一個關閉事件,可…

聚星文社AI工具

聚星文社AI工具是一種基于人工智能技術開發的工具,旨在輔助作者和寫作人員提升創作效率和質量。 點擊下載 該工具可以提供多項功能,包括語法糾錯、智能推薦、文章自動摘要等。 通過使用聚星文社AI工具,用戶可以在寫作過程中得到即時的糾錯建…

memcached服務介紹

memcached 基礎概念安裝使用 基礎概念 Memcached 是一個高性能的分布式內存對象緩存系統,用于減少數據庫負載,加速動態 Web 應用。 Memcached 的基本概念 緩存:Memcached 的核心功能是緩存數據,它將經常訪問的數據存儲在內存中…

ECMAScript6介紹及環境搭建

這實際上說明,對象的解構賦值是下面形式的簡寫。 let { foo: foo, bar: bar } { foo: ‘aaa’, bar: ‘bbb’ }; 也就是說,對象的解構賦值的內部機制,是先找到同名屬性,然后再賦給對應的變量。真正被賦值的是后者,而…

數據結構_緒論

1.數據結構的研究內容 研究數據的特性和數據之間的關系 用計算機解決一個問題的步驟 1.具體問題抽象成數學模型 實質: 分析問題--->提取操作對象--->找出操作對象之間的關系(數據結構)--->用數學語言描述 操作對象對象之間的關系 2.設計算法 3.編程,調試,運行 …

GO語言面試題目,使用3個協程按照順序從1打印到100

GO語言面試題目,使用3個協程按照順序從1打印到100 稍微把題目拓展了下,使用N個協程 打印M個數,應該很好理解,創建一個N個協程的列表,然后每打印一個數,就傳到下一個chan中,一次循環 package m…

【數據結構與算法】哈希函數 詳解

哈希函數的構造方法有哪些? 直接定址法:直接使用關鍵字或者關鍵字的某個線性函數值作為哈希地址。 數字分析法:對關鍵字進行分析,選擇關鍵字中的某幾位或者進行某種運算得到的結果作為哈希地址。 平方取中法:先計算關…

通信協議總結

IIC 基本特點 同步,半雙工 標準100KHz,最高400KHz(IIC主要應用于低速設備) 硬件組成 需外接上拉電阻 通信過程 空閑狀態 SDA和SCL都處于高電平 開始信號S和終止信號P 在數據傳輸過程中,當SCL0時,SDA才…

十常侍亂政 | 第2集 | 愿領精兵五千,斬關入內,冊立新君,誅殺宦黨,掃清朝廷,以安天下 | 三國演義 | 逐鹿群雄

🙋大家好!我是毛毛張! 🌈個人首頁: 神馬都會億點點的毛毛張 📌這篇博客是毛毛張分享三國演義文學劇本中的經典臺詞和語句,本篇分享的是《三國演義》第Ⅰ部分《群雄逐鹿》的第2??集《十常侍亂政治》&am…

匯聚榮做拼多多運營第一步是什么?

匯聚榮做拼多多運營第一步是什么?在眾多電商平臺中,拼多多憑借其獨特的社交電商模式迅速崛起,吸引了大量消費者和商家的目光。對于希望在拼多多上開店的商家而言,了解如何進行有效運營是成功的關鍵。那么,匯聚榮做拼多多運營的第…