1.什么是 Composite Aggregation?
Composite Aggregation 是 Elasticsearch 中的一种特殊聚合方式,适用于需要分页展示的聚合结果。它与传统的聚合方式不同,采用了基于游标的分页模型。这种聚合方式可以高效地处理多级聚合中的所有桶,并支持分页功能。
2.基本结构
一个典型的 Composite Aggregation 查询如下:
```json
GET /your_index_name/_search
{
"size": 0,
"aggs": {
"my_composite_agg": {
"composite": {
"size": 10,
"sources": [
{
"field1": {
"terms": {
"field": "your_field_name1"
}
}
},
{
"field2": {
"terms": {
"field": "your_field_name2"
}
}
}
]
}
}
}
}
```
在上述查询中:
• `sources`定义了按哪些字段分组,字段顺序决定了分组键(bucket key)的生成顺序。
• `size`定义每页的桶数量。
• 响应结果中的`after_key`用于获取下一页数据。
3.分页机制
Composite Aggregation 的分页机制通过`after`参数实现。每次查询返回指定数量的桶,并通过`after_key`提供下一页的游标。这种方式可以确保分页查询中数据无重复、无遗漏。
例如:
```json
GET /your_index_name/_search
{
"size": 0,
"aggs": {
"my_composite_agg": {
"composite": {
"size": 10,
"sources": [
{
"field1": {
"terms": {
"field": "your_field_name1"
}
}
}
],
"after": {
"field1": "last_value_of_field1"
}
}
}
}
}
``
4.排序和方向
Composite Aggregation 支持对每个值源进行排序,可以通过设置`order`参数为`asc`(升序)或`desc`(降序)。
```json
GET /your_index_name/_search
{
"size": 0,
"aggs": {
"my_composite_agg": {
"composite": {
"size": 10,
"sources": [
{
"field1": {
"terms": {
"field": "your_field_name1",
"order": "desc"
}
}
},
{
"field2": {
"terms": {
"field": "your_field_name2",
"order": "asc"
}
}
}
]

最低0.47元/天 解锁文章
733

被折叠的 条评论
为什么被折叠?



