聚合

# 按 key 排序
"total_use": {
    "terms": {
        "field": "total_use",
        "size": 100,
        "order": {
            "_term": "desc"
        }
    }
}

聚合排序

{
   "query": {},
   "aggs": {
       "frame_id": {
           "terms": {
               "field": "frame_id",
               "size": 10,
               "order": {
                   "relation_id": "desc"
               }
           },
           "aggs": {
               "relation_id": {
                   "cardinality": {
                       "field": "relation_id"
                   }
               }
           }
       }
   }
}

聚合分区

如果聚合的结果太多,一次返回会非常慢,可以将结果分块,然后每次返回一部分。

{
   "size": 0,
   "aggs": {
      "expired_sessions": {
         "terms": {
            "field": "account_id",
            "include": {
               "partition": 0,
               "num_partitions": 20
            },
            "size": 10000,
            "order": {
               "last_access": "asc"
            }
         },
         "aggs": {
            "last_access": {
               "max": {
                  "field": "access_date"
               }
            }
         }
      }
   }
}

注解

如果指定了一个很大的分区数量,而聚合的结果很少,返回的结果是在随机分区,而不是第一个或者最后一个分区。

常规做法:

  1. 使用 cardinality 统计总的数据,从而计算分区数量;
  2. 依次获取每个分区的数据;