elasticsearch7分组时,按照不同条件计数
时间: 2023-07-28 09:12:06 浏览: 88
可以使用 Elasticsearch 的聚合功能来实现按照不同条件计数分组。具体来说,可以通过使用 `terms` 聚合来实现按照某个字段或多个字段进行分组,并且使用 `value_count` 子聚合来计算每组的文档数量。
例如,假设有一个名为 `my_index` 的索引,其中包含以下文档:
```
{
"name": "Alice",
"age": 25,
"gender": "female"
},
{
"name": "Bob",
"age": 30,
"gender": "male"
},
{
"name": "Charlie",
"age": 35,
"gender": "male"
},
{
"name": "David",
"age": 25,
"gender": "male"
}
```
想要按照年龄和性别进行分组,并且计算每组的文档数量,可以使用以下聚合查询:
```
GET my_index/_search
{
"size": 0,
"aggs": {
"age_group": {
"terms": {
"field": "age"
},
"aggs": {
"gender_group": {
"terms": {
"field": "gender"
},
"aggs": {
"doc_count": {
"value_count": {
"field": "_id"
}
}
}
}
}
}
}
}
```
该查询将返回以下结果:
```
{
"aggregations" : {
"age_group" : {
"buckets" : [
{
"key" : 25,
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 0,
"gender_group" : {
"buckets" : [
{
"key" : "male",
"doc_count" : 1
},
{
"key" : "female",
"doc_count" : 1
}
]
}
},
{
"key" : 30,
"doc_count" : 1,
"gender_group" : {
"buckets" : [
{
"key" : "male",
"doc_count" : 1
}
]
}
},
{
"key" : 35,
"doc_count" : 1,
"gender_group" : {
"buckets" : [
{
"key" : "male",
"doc_count" : 1
}
]
}
}
]
}
}
}
```
该结果显示了按照年龄和性别进行分组的结果,并且计算了每组的文档数量。例如,年龄为 25 的文档有两个,其中一个是男性,一个是女性。
阅读全文