一、参考
elasticsearch 权威指南
二、基本概念
2.1 两个次要概念
- bucket 桶
满足特定条件的文档的汇合
- metric 指标
对桶内的文档进行统计计算
每一个聚合都是
(1)一个或者多个桶
(2)0 个或者多个指标
的组合
2.2 桶
简略说来,桶就是满足了特定条件的文档的汇合
当聚合开始被执行,
(1)每个文档外面的值通过计算来决定合乎哪个桶的条件,
(2)如果匹配到,文档将放入对应的桶,并且接着进行聚合操作
(3)桶能够被嵌套到其余的桶中,提供层次化或者有条件的划分计划
2.3 指标
分桶是一种达到目标的伎俩,最终的指标是:
对于桶内的文档进行一些指标的计算
大多数的指标都是简略的数学计算
三、桶排序
3.1 默认排序
默认,多值桶会依据 doc_count 降序排列
3.2 order
引入了一个 order 对象,扩大了 桶排序:
类型 | 阐明 | terms | histogram | date_histogram |
---|---|---|---|---|
_count | 依照文档数量排序 | ✅ | ✅ | ✅ |
_term | 依照词项的字符串的字典顺序排列 | ✅ | ❌ | ❌ |
_key | 按每个桶的键值数值排序 | ❌ | ✅ | ✅ |
3.3 度量排序
能够增加一个度量聚合,而后在外层 order 中指定 具体的度量
- 度量只有 1 个输入值
GET /cars/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color",
"order": {"avg_price": "asc"}
},
"aggs": {
"avg_price": {
"avg": {"field": "price"}
}
}
}
}
}
- 度量如果有多个值,须要指定具体的参数
GET /cars/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color",
"order": {"stats.variance": "asc"}
},
"aggs": {
"stats": {
"extended_stats": {"field": "price"}
}
}
}
}
}
3.4 深度度量
能够定义更深的门路,将度量用尖括号(>
)嵌套起来,像这样:
my_bucket>another_bucket>metric
然而:
(1) 嵌套门路上的每个桶都必须是 单值 的
(2) 只有三个单值桶:filter
、global
和 reverse_nested
GET /cars/_search
{
"size": 0,
"aggs": {
"colors": {
"histogram": {
"field": "price",
"interval": 20000,
"order": {"red_green_cars>stats.variance": "asc"}
},
"aggs": {
"red_green_cars": {
"filter": {
"terms": {
"color": [
"red",
"green"
]
}
},
"aggs": {
"stats": {
"extended_stats": {"field": "price"}
}
}
}
}
}
}
}