注意:
語句:
GET 76/sessions/_search
{
"size": 0,
"query": {
"bool": {
"must": [
{
"term": {
"sid": {
"value": "76e14832"
}
}
},
{
"range": {
"v_ymd": {
"format": "yyyy-MM-dd",
"gte": "2018-02-02",
"lte": "2018-02-02"
}
}
}
]
}
},
"aggs": {
"pv": {
"nested": {
"path": "scene"
},
"aggs": {
"pv2": {
"terms": {
"field": "scene.pid",
"size": 1000,
"shard_size": 10000
},
"aggs": {
"pv_count": {
"value_count": {
"field": "scene.pid"
}
},
"r_bucket_sort": {
"bucket_sort": {
"sort": {
"pv_count": {
"order": "desc"
}
},
"from": 10,
"size": 10
}
}
}
}
}
}
}
}
部分解釋:
- 最外層的size=0,表示該查詢不返回詳情,只返回聚合結果;
- query中使用一個must列表對數據進行過濾;
- terms實現分桶的功能,相似於sql中的分組功能;
- terms中的shard_size表示每一個分片返回的數據量,size表示返回的桶的數據,會收到bucket_sort中size的限制;
- value_count實現計數的一個功能;
- sort指定排序的字段和排序的升降序,可使用聚合後的字段;
- 使用bucket_sort的功能,from、size分別表示從第幾條數據開始,取多少條數據。
特別注意:
- 在terms中使用bucket_sort功能的時候,terms中分組的size大小設置應該大於bucket_sort中的from+size的大小,不然會由於terms中size的大小限制了返回的數據。
- bucket_sort的sort排序是針對父聚合返回的結果進行排序的,好比上述terms返回的結果爲1000條,那麼bucket_sort僅對這1000條進行排序。