gre 理解 但是 perl card text values 關心 combine Aggregation 概述

Aggregation 可以和普通查詢結果並存,一個查詢結果中也允許包含多個不相關的Aggregation. 如果只關心聚合結果而不關心查詢結果的話會把SearchSource的size設置為0,能有效提高性能.

Aggregation 類型

Metrics: 簡單聚合類型, 對於目標集和中的**所有文檔**計算聚合指標, 一般沒有嵌套的sub aggregations. 比如 平均值(avg) , 求和 (sum), 計數 (count), 基數 (cardinality). Cardinality對應distinct count
Bucketing: 桶聚合類型, 在一系列的桶而不是所有文檔上計算聚合指標,每個桶表示原始結果集合中符合某種條件的子集. 一般有嵌套的sub aggregations. 典型的如TermsAggregation, HistogramAggregation
Matrix: 矩陣聚合, 多維度聚合, 即根據兩個或者多個聚合維度計算二維甚至多維聚合指標表格. 目前貌似只有一種MatrixStatAggregation. 並且目前不支持腳本(scripting)
  1. Pipeline: 管道聚合, 在之前聚合結果的基礎上再次進行聚合計算, 往往和Bucketing Aggregation 結合起來使用. 舉列: 先求出過去30天每天的交易總金額 (Bucketing aggregation),再統計交易總金額大於10000的天數 (Pipeline aggregation).

Aggregation 結構

Aggregation request: 兩層結構: Aggregation -> SubAggregation Sub aggregation是在原來的Aggregation的計算結果中進一步做聚合計算

Aggregation response: 三層結構: (針對Bucketing aggregation) MultiBucketsAggregation -> Buckets -> Aggregations

Aggregation 屬性: name: 和請求中的Aggregation的名字對應buckets: 每個Bucket對應Agggregation結果中每一個可能的取值和相應的聚合結果.

Bucket 屬性:key: 對應的是聚合維度可能的取值, 具體的值和Aggregation的類型有關, 比如Term aggregation (按交易類型計算總金額), 那麽Bucket key值就是所有可能的交易類型 (credit/debit etc). 又比如DateHistogram aggregation (按天計算交易筆數), 那麽Bucket key值就是具體的日期. docCount: 對應的是每個桶中的文本數量. value: 對應的是聚合指標的計算結果. 註意如果是多層Aggregation計算, 中間層的Aggregation value一般沒有值, 比如Term aggregation. 只有到底層具體計算指標的Aggregation才有值. aggregations: 對應請求中當前Aggregation的subAggregation的計算結果 (如果存在)

SQL映射成Aggregation

SQL映射實現的前提: 只針對聚合計算,即sql select部分存在聚合函數類型的column

映射過程很難直接描述,上幾個例子方便大家理解,反正SQL的結構也無非就是SELECT/FROM/WHERE/GROUP BY/HAVING/ORDER BY. ORDER BY先不討論,一般聚合結果不太關心順序. FROM也很容易理解,就是索引的名字.

SQL組成部分對應的ES Builder:

Untitled

常用的SQL運算符和聚合函數對應的ES Builder:

Untitled

1.select count(payerId) as payerCount from Payment group by country