一 序
本文屬於極客時間Elasticsearch核心技術與實戰學習筆記系列。
二 聚合的作用範圍
-
ES 聚合分析的默認作用範圍是 query 的查詢結果集
-
同時 ES 還支持以下方式改變聚合的作用範圍
-
Filter
-
Post_Filter
-
Global
-
2.1 demo
filter的範圍:
下面的all_jobs是query的範圍對所有員工工作進行分類。上面的older_person是對年齡做了filter(只對子聚合生效)。右側的結果返回分桶的情況。
Post_Filter
- 是對聚合分析後的文檔進行再次過濾
- Size 無需設置爲 0
- 使用場景
- 一條語句,獲取聚合信息 + 獲取符合條件的文檔
jobs聚合是對全部的職業分桶,post_filter是匹配查詢條件:"job.keyword": "Dev Manager
Global
上面的查詢條件,query是要按照age>40去篩選,下面的jobs是根據job.keyword聚合。返回的結果是1
Golbal,無視query,對全部文檔進行統計:返回的結果是20條。
三 排序
3.1 order
指定 order,按照 count 和 key 排序
- 默認情況,按照 count 降序排序
- 指定 size,就能返回相應的桶
查詢條件:age>20,工作類型分桶,排序是count升序,key降序。右側的結果符合預期。
3.2 基於子聚合的值排序
基於工作類型分桶,基於分桶的平均工資再做排序。
上面統計的是單值,
這裏排序是統計的min降序