ES聚合有哪些方式
Elasticsearch 提供了多种聚合(Aggregation)方式,允许用户对数据进行分析和统计。聚合可以分为几类,包括桶聚合(Bucket Aggregations)、度量聚合(Metric Aggregations)等。以下是一些常见的聚合方式及其示例:
1. 桶聚合(Bucket Aggregations)
桶聚合用于将文档分组,并可以在每个组上执行其他聚合。
a. Terms Aggregation
terms 聚合用于按字段值将文档分组,例如统计各个类别的文档数量。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "categories": {
      "terms": {
        "field": "category.keyword"
      }
    }
  }
}
- 解释:这个查询将返回 category字段中每个不同值的文档数量。
b. Date Histogram Aggregation
date_histogram 聚合用于按时间段对文档进行分组,例如按天、月、年统计。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "daily_sales": {
      "date_histogram": {
        "field": "sale_date",
        "interval": "day"
      }
    }
  }
}
- 解释:这个查询将返回按天分组的销售数量。
2. 度量聚合(Metric Aggregations)
度量聚合用于对数值字段执行计算,例如求和、平均值、最大值等。
a. Sum Aggregation
sum 聚合用于计算一个字段的总和。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "total_sales": {
      "sum": {
        "field": "sales_amount"
      }
    }
  }
}
- 解释:这个查询将返回 sales_amount字段的总和。
b. Average Aggregation
avg 聚合用于计算一个字段的平均值。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "average_price": {
      "avg": {
        "field": "price"
      }
    }
  }
}
- 解释:这个查询将返回 price字段的平均值。
3. 复合聚合(Composite Aggregation)
复合聚合允许按照多个维度对文档进行分组和聚合,非常适合需要分页的聚合。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "composite_agg": {
      "composite": {
        "sources": [
          {
            "category": {
              "terms": {
                "field": "category.keyword"
              }
            }
          },
          {
            "price_range": {
              "range": {
                "field": "price",
                "ranges": [
                  { "to": 50 },
                  { "from": 50, "to": 100 },
                  { "from": 100 }
                ]
              }
            }
          }
        ]
      }
    }
  }
}
- 解释:这个查询将根据 category和price的范围对文档进行分组。
4. 嵌套聚合(Nested Aggregations)
嵌套聚合允许在一个聚合的结果上进行进一步的聚合。例如,可以在 terms 聚合内进行 avg 聚合。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "categories": {
      "terms": {
        "field": "category.keyword"
      },
      "aggs": {
        "average_price": {
          "avg": {
            "field": "price"
          }
        }
      }
    }
  }
}
- 解释:这个查询将返回每个类别的文档数量及其对应的平均价格。
5. 过滤聚合(Filter Aggregation)
过滤聚合用于在特定条件下对文档进行聚合。
示例:
GET /my_index/_search
{
  "size": 0,
  "aggs": {
    "filtered_sales": {
      "filter": {
        "term": {
          "category.keyword": "electronics"
        }
      },
      "aggs": {
        "total_sales": {
          "sum": {
            "field": "sales_amount"
          }
        }
      }
    }
  }
}
- 解释:这个查询将只计算 category为 "electronics" 的文档的销售总和。
总结
Elasticsearch 提供了丰富的聚合功能,支持各种复杂的数据分析需求。通过使用不同类型的聚合,你可以从数据中提取有价值的信息,帮助做出更好的决策。在实际应用中,可以根据需求组合使用这些聚合方式,满足各种数据分析场景。
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号