2.1 先分组, 再聚合统计

(1) 先按tags分组, 再计算每个tag下图书的平均价格, 请求语法:

GET book_shop / it_book / _search 
{
	"size": 0,
	"aggs": {
		"group_by_tags": {
			"terms": {
				"field": "tags.keyword"
			},
			"aggs": {
				"avg_price": {
					"avg": {
						"field": "price"
					}
				}
			}
		}
	}
}


(2) 响应结果:

{
	"hits": {
		"total": 3,
		"max_score": 0.0,
		"hits": []
	},
	"aggregations": {
		"group_by_tags": {
			"doc_count_error_upper_bound": 0,
			"sum_other_doc_count": 0,
			"buckets": [{
					"key": "Java",
					"doc_count": 3,
					"avg_price": {
						"value": 102.33333333333333
					}
				},
				{
					"key": "编程语言",
					"doc_count": 2,
					"avg_price": {
						"value": 114.0
					}
				},
				......
			]
		}
	}

2.2 先分组, 再统计, 最后排序

(1) 计算每个tag下图书的平均价格, 再按平均价格降序排序, 查询语法:

GET book_shop / it_book / _search 
{
	"size": 0,
	"aggs": {
		"all_tags": {
			"terms": {
				"field": "tags.keyword",
				"order": {
					"avg_price": "desc"
				} // 根据下述统计的结果排序
			},
			"aggs": {
				"avg_price": {
					"avg": {
						"field": "price"
					}
				}
			}
		}
	}
}

(2) 响应结果:

与#2.1节内容相似, 区别在于按照价格排序显示了.

2.3 先分组, 组内再分组, 然后统计、排序

(1) 先按价格区间分组, 组内再按tags分组, 计算每个tags组的平均价格, 查询语法:

GET book_shop/it_book/_search
{
	"size": 0,
	"aggs": {
		"group_by_tags": {
			"terms": {
				"field": "tags.keyword"
			},
			"aggs": {
				"avg_price": {
					"avg": {
						"field": "price"
					}
				}
			}
		}
	}
}



(2) 响应结果:

{
	"hits": {
		"total": 3,
		"max_score": 0.0,
		"hits": []
	},
	"aggregations": {
		"group_by_price": {
			"buckets": [{
					"key": "0.0-100.0", // 区间0.0-100.0
					"from": 0.0,
					"to": 100.0,
					"doc_count": 1, // 共查找到了3条文档
					"group_by_tags": { // 对tags分组聚合
						"doc_count_error_upper_bound": 0,
						"sum_other_doc_count": 0,
						"buckets": [{
								"key": "Java",
								"doc_count": 1,
								"avg_price": {
									"value": 79.0
								}
							},
							......
						]
					}
				},
				{
					"key": "100.0-150.0",
					"from": 100.0,
					"to": 150.0,
					"doc_count": 2,
					"group_by_tags": {
						"doc_count_error_upper_bound": 0,
						"sum_other_doc_count": 0,
						"buckets": [{
								"key": "Java",
								"doc_count": 2,
								"avg_price": {
									"value": 114.0
								}
							},
							......
						}
					]
				}
			}
		]
	}
}