中國網(wǎng)站模板免費下載廣東整治互聯(lián)網(wǎng)霸王條款
Elasticsearch 的`bucket_sort`聚合是一種管道聚合,用于對父多桶聚合(如`terms`、`date_histogram`、`histogram`等)的桶進行排序。以下是關(guān)于`bucket_sort`的詳細說明:
1.基本功能
`bucket_sort`聚合可以對父聚合返回的桶進行排序,支持以下排序依據(jù):
? `_key`:基于桶的鍵值(例如時間戳或詞項)。
? `_count`:基于桶中的文檔數(shù)量。
? 子聚合結(jié)果:基于子聚合的計算結(jié)果(例如`sum`、`avg`等)。
此外,`bucket_sort`還可以通過`from`和`size`參數(shù)截斷結(jié)果,只返回部分桶。
2.參數(shù)說明
`bucket_sort`聚合的主要參數(shù)包括:
? `sort`:指定排序字段和順序(升序或降序)。
? `from`:跳過前`N`個桶。
? `size`:返回的桶數(shù)量。
? `gap_policy`:當數(shù)據(jù)中存在缺口時的處理策略,默認為`skip`。
3.使用場景
3.1按子聚合結(jié)果排序
假設(shè)有一個`sales`索引,包含交易數(shù)據(jù),我們希望按月統(tǒng)計銷售額,并返回銷售額最高的 3 個月:
```json
POST /sales/_search
{
? "size": 0,
? "aggs": {
? ? "sales_per_month": {
? ? ? "date_histogram": {
? ? ? ? "field": "date",
? ? ? ? "calendar_interval": "month"
? ? ? },
? ? ? "aggs": {
? ? ? ? "total_sales": {
? ? ? ? ? "sum": {
? ? ? ? ? ? "field": "price"
? ? ? ? ? }
? ? ? ? },
? ? ? ? "sales_bucket_sort": {
? ? ? ? ? "bucket_sort": {
? ? ? ? ? ? "sort": [
? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? "total_sales": {
? ? ? ? ? ? ? ? ? "order": "desc"
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? ],
? ? ? ? ? ? "size": 3
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? }
}
```
此查詢將返回銷售額最高的 3 個月。
3.2僅截斷結(jié)果
如果不進行排序,僅截斷結(jié)果,可以省略`sort`參數(shù)。例如,僅返回第 2 個桶:
```json
POST /sales/_search
{
? "size": 0,
? "aggs": {
? ? "sales_per_month": {
? ? ? "date_histogram": {
? ? ? ? "field": "date",
? ? ? ? "calendar_interval": "month"
? ? ? },
? ? ? "aggs": {
? ? ? ? "bucket_truncate": {
? ? ? ? ? "bucket_sort": {
? ? ? ? ? ? "from": 1,
? ? ? ? ? ? "size": 1
? ? ? ? ? }
? ? ? ? }
? ? ? }
? ? }
? }
}
```
此查詢將僅返回第 2 個桶。
4.與其他聚合結(jié)合使用
`bucket_sort`可以與多種聚合結(jié)合使用,例如:
? `date_histogram`:按時間間隔分桶并排序。
? `histogram`:按數(shù)值間隔分桶并排序。
5.注意事項
? `bucket_sort`是管道聚合,執(zhí)行順序在非管道聚合之后。
? 排序和截斷操作僅對父聚合返回的桶生效。
通過以上方式,`bucket_sort`聚合可以靈活地對聚合結(jié)果進行排序和截斷,滿足多種數(shù)據(jù)分析需求。