Elasticsearch如何聚合查詢多個統計值,如何嵌套聚合?並相互引用,統計索引中某一個欄位的空值率?語法是怎麼樣的?

来源:https://www.cnblogs.com/the-pig-of-zf/p/18256995
-Advertisement-
Play Games

Elasticsearch聚合查詢是一種強大的工具,允許我們對索引中的數據進行複雜的統計分析和計算。本文將詳細解釋一個聚合查詢示例,該查詢用於統計滿足特定條件的文檔數量,並計算其占總文檔數量的百分比。這裡回會分享如何統計某個欄位的空值率,然後擴展介紹ES的一些基礎知識。 ...


目錄

Elasticsearch聚合查詢說明

Elasticsearch聚合查詢是一種強大的工具,允許我們對索引中的數據進行複雜的統計分析和計算。本文將詳細解釋一個聚合查詢示例,該查詢用於統計滿足特定條件的文檔數量,並計算其占總文檔數量的百分比。這裡回會分享如何統計某個欄位的空值率,然後擴展介紹ES的一些基礎知識。

空值率查詢DSL

此查詢結構通過 GET /my_index/_search 發送到 Elasticsearch,以實現對索引 my_index 的聚合分析。查詢分為以下幾個部分:

{
  "size": 0, // 不返回任何搜索結果,只聚合數據
  "aggs": {
    "all_documents_agg": { // 聚合所有文檔
      "terms": {
        "script": {
          "source": "return 'all_documents';" // 強制所有文檔聚合到一個桶中
        }
      },
      "aggs": {
        "total_count": { // 統計所有文檔的數量
          "value_count": {
            "field": "_id" // 使用文檔的ID欄位進行計數
          }
        },
        "filtered_count": { // 統計滿足特定條件的文檔數量
          "value_count": {
            "script": {
              "source": "if (doc['my_field'].size() != 0 && doc['my_field'].value != '') return 1" // 統計欄位 'my_field' 非空且非零的文檔數量
            }
          }
        },
        "percentage_agg": { // 計算滿足特定條件的文檔數量占總文檔數量的百分比
          "bucket_script": {
            "buckets_path": {
              "totalCount": "total_count", // 引用所有文檔的數量
              "filteredCount": "filtered_count" // 引用滿足特定條件的文檔數量
            },
            "script": "params.filteredCount / params.totalCount * 100" // 計算百分比
          }
        }
      }
    }
  }
}

聚合部分詳解

  • size: 0:此設置意味著查詢不會返回具體的搜索結果,而是僅執行聚合分析。
  • aggs(聚合):定義了一個名為 all_documents_agg 的聚合。
    • terms:使用 script 將所有文檔強制聚合到一個名為 all_documents 的桶中。
    • aggs:在 all_documents 桶內,定義了三個子聚合:
      1. total_count:使用 value_count 統計所有文檔的數量,基於文檔的 _id 欄位。
      2. filtered_count:使用 value_count 統計滿足特定條件的文檔數量。條件是欄位 my_field 非空且非零。
      3. percentage_agg:使用 bucket_script 計算滿足特定條件的文檔數量占總文檔數量的百分比。此聚合使用 total_count 和 filtered_count 的結果,並通過 params.filteredCount / params.totalCount * 100 計算百分比。

Elasticsearch聚合基礎知識擴展

Elasticsearch聚合概念

Elasticsearch 的聚合功能類似於 SQL 中的 GROUP BY 語句,允許我們對數據進行分組和計算統計信息。聚合主要分為以下幾類:

  • Metric Aggregations(度量聚合):計算數值,例如計數、平均值、最大值、最小值等。例如,value_count 就是一個度量聚合,用於計算特定欄位的值的數量。
  • Bucket Aggregations(桶聚合):將文檔分組到不同的桶中。每個桶都可以包含一個或多個文檔。例如,terms 聚合將文檔根據特定欄位的值進行分組。
  • Pipeline Aggregations(管道聚合):對其它聚合的結果進行進一步計算。例如,bucket_script 可以對多個聚合結果進行自定義計算。

Script 用法

在 Elasticsearch 中,腳本可以用於在查詢和聚合中執行動態計算。在上述查詢中,腳本用於兩個地方:

  • terms 聚合中的 script:將所有文檔強制聚合到一個桶中。
  • filtered_count 的條件判斷:檢查欄位 my_field 是否非空且非零。
  • bucket_script 聚合:計算滿足條件的文檔數量占總文檔數量的百分比。

使用腳本可以提供更大的靈活性,但需要註意性能和安全性問題。

Elasticsearch聚合查詢語法

Elasticsearch(ES)提供了豐富的聚合功能,用於對數據進行統計和分析。以下是一些常見的聚合類型及其示例:

指標聚合(Metric Aggregations)

  • sum:計算數值欄位的總和。
  • avg:計算數值欄位的平均值。
  • min:查找數值欄位的最小值。
  • max:查找數值欄位的最大值。
  • extended_stats:獲取數值欄位的多個統計數據(平均值、最大值、最小值、總和、方差等)。
  • value_count:計算欄位的非空值數量。

示例:

{
  "aggs": {
    "my_sum_agg": {
      "sum": {
        "field": "numeric_field"
      }
    },
    "my_avg_agg": {
      "avg": {
        "field": "numeric_field"
      }
    }
  }
}

桶聚合(Bucket Aggregations)

  • date_histogram:基於時間範圍將文檔分組為多個桶。
  • histogram:基於數值欄位將文檔分組為多個桶。
  • terms:基於字元串或數值欄位將文檔分組為多個桶。
  • filters:將文檔分組為多個桶,每個桶對應一組過濾條件。

示例:


{
  "aggs": {
    "my_date_histogram_agg": {
      "date_histogram": {
        "field": "timestamp",
        "interval": "1d"
      }
    },
    "my_terms_agg": {
      "terms": {
        "field": "category_field"
      }
    }
  }
}

矩陣聚合(Matrix Aggregations)

  • matrix_stats:計算多個數值欄位的統計數據(如相關性、協方差、方差等)。

示例:

{
  "aggs": {
    "my_matrix_stats_agg": {
      "matrix_stats": {
        "fields": ["numeric_field1", "numeric_field2"]
      }
    }
  }
}

組合聚合(Pipeline Aggregations)

  • derivative:計算聚合結果的導數。
  • cumulative_sum:計算聚合結果的累積和。
  • bucket_script:在多個桶聚合結果上執行腳本。
  • bucket_selector:根據腳本選擇或排除特定桶。

示例:

{
  "aggs": {
    "my_terms_agg": {
      "terms": {
        "field": "category_field"
      },
      "aggs": {
        "my_avg_agg": {
          "avg": {
            "field": "numeric_field"
          }
        },
        "my_bucket_script_agg": {
          "bucket_script": {
            "buckets_path": {
              "avgField": "my_avg_agg"
            },
            "script": "params.avgField * 2"
          }
        }
      }
    }
  }
}

原文地址:Elasticsearch如何聚合查詢多個統計值,如何嵌套聚合?並相互引用,統計索引中某一個欄位的空值率?語法是怎麼樣的

本文來自博客園,作者:張飛的豬,轉載請註明原文鏈接:https://www.cnblogs.com/the-pig-of-zf/p/18256995

公眾號:張飛的豬大數據分享,不定期分享大數據學習的總結和相關資料,歡迎關註。

個人網站"張飛的豬編程工作室"鏈接: https://zhangfeidezhu.com


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本系列文章是DolphinScheduler由淺入深的教程,涵蓋搭建、二開迭代、核心原理解讀、運維和管理等一系列內容。適用於想對 DolphinScheduler瞭解或想要加深理解的讀者。 **祝開卷有益。 ** 本系列教程基於 DolphinScheduler 2.0.5 做的優化。(穩定版 ...
  • 通過本篇文章的學習和實踐,我們深入瞭解瞭如何利用Docker技術快速部署KingbaseES資料庫。從下載鏡像到編寫Docker Compose模板,再到容器的啟動和管理,每一步都體現了現代化部署方式的便捷和高效。此外,我們還掌握了KSQL命令行工具的使用,這將極大地提升開發人員與資料庫交互的效率。 ...
  • 本文是對這篇文章Detect And Repair Corruption in an Oracle Database[1]的翻譯,翻譯如有不當的地方,敬請諒解,請尊重原創和翻譯勞動成果,轉載的時候請註明出處。謝謝! Oracle資料庫提供了多種方法檢測和修複數據文件中的壞塊。主要有下麵一些方法: R ...
  • 在Tez上優化Hive查詢無法採用一刀切的方法。查詢性能取決於數據的大小、文件類型、查詢設計和查詢模式。在性能測試過程中,應評估和驗證配置參數及任何SQL修改。建議在工作負載的性能測試過程中一次只進行一項更改,並最好在開發環境中評估調優更改的影響,然後再在生產環境中使用。 ...
  • 在各行各業中,越來越多的公司開始重視收集數據,並尋找創新方法來獲得真實可行的商業成果,並且願意投入大量時間和金錢來實現這一目標。 據IDC稱,數據和分析軟體及雲服務市場規模在 2021 年達到了 900 億美元,隨著企業繼續對人工智慧和機器學習 (AI/ML) 和現代數據計划進行投資,預計到 202 ...
  • 近日,中國電子學會聯合中國電子技術標準化研究院等單位,在安徽省合肥市舉辦“節能服務進企業”暨綠色數據中心對接推廣活動。會議為天翼雲存儲資源盤活系統HBlock入選《國家工業和信息化領域節能降碳技術裝備推薦目錄(2024年版)》頒發榮譽證書;天翼雲存儲產品專家肖夏敏發表演講,向業界展示了HBlock在... ...
  • 近年來,新質生產力、數據要素及數據資產入表等新興概念猶如一股強勁的浪潮,持續衝擊並革新著企業數字化轉型的觀念視野,昭示著一個以數據為核心驅動力的新時代正穩步啟幕。 面對這些引領經濟轉型的新興概念,為了更好地服務於客戶並提供切實可行的實踐指導,自3月20日起,袋鼠雲將推出全新《袋鼠雲大數據實操指南》系 ...
  • 本文分享自華為雲社區《【GaussTech速遞】技術解讀之GaussDB多租技術》,作者:GaussDB資料庫。 資料庫多租技術介紹 隨著雲計算時代的到來,多租戶的概念也逐漸廣為人知。“多租戶”使得租戶之間可以共用物理資源,能夠幫助用戶節約硬體成本和運維成本,提高資源利用效率。同時,在實現的過程中, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...