一、参考
二、基本概念
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"
}
}
}
}
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。