یکی از ویژگیهای قدرتمند Elasticsearch قابلیت Aggregation است که به شما امکان میدهد دادهها را به شکلهای مختلف گروهبندی و تحلیل کنید. این قابلیت مشابه عملیات GROUP BY
و توابع تجمیعی (مثل COUNT، SUM، AVG) در SQL عمل میکند، اما بسیار انعطافپذیرتر و سریعتر است.
انواع اصلی Aggregations
Metric Aggregations
برای محاسبه مقادیر عددی روی دادهها استفاده میشود. مانند:
- avg → میانگین
- sum → مجموع
- min → کمترین مقدار
- max → بیشترین مقدار
- value_count → شمارش مقادیر
GET /sales/_search
{
"size": 0,
"aggs": {
"avg_price": {
"avg": { "field": "price" }
}
}
}
در این مثال میانگین قیمت فروشها محاسبه میشود.
Bucket Aggregations
دادهها را بر اساس دستهبندی یا محدوده مشخص گروهبندی میکند. نمونهها:
- terms → گروهبندی بر اساس مقادیر یکتا
- range → تقسیمبندی بر اساس بازههای عددی
- date_histogram → گروهبندی بر اساس بازههای زمانی
GET /sales/_search
{
"size": 0,
"aggs": {
"sales_by_brand": {
"terms": { "field": "brand.keyword" }
}
}
}
در این مثال تعداد فروشها بر اساس برند گروهبندی میشود.
Pipeline Aggregations
روی نتایج Aggregationهای دیگر اعمال میشود، مثل محاسبه میانگین روی چندین bucket یا محاسبه درصد تغییر.
مثال ترکیبی
میتوان چندین Aggregation را با هم ترکیب کرد. برای مثال محاسبه میانگین قیمت محصولات به تفکیک برند:
GET /products/_search
{
"size": 0,
"aggs": {
"brands": {
"terms": { "field": "brand.keyword" },
"aggs": {
"avg_price": {
"avg": { "field": "price" }
}
}
}
}
}
مقایسه Aggregations با SQL
Elasticsearch | SQL | کاربرد |
---|---|---|
terms aggregation | GROUP BY | گروهبندی دادهها بر اساس یک فیلد |
avg aggregation | AVG() | محاسبه میانگین یک ستون |
sum aggregation | SUM() | محاسبه مجموع یک ستون |
date_histogram | GROUP BY DATE() | گروهبندی دادهها بر اساس تاریخ |
با استفاده از Aggregations، میتوان داشبوردهای تحلیلی قدرتمندی ساخت و در زمان واقعی (Real-time) به تحلیل دادهها پرداخت.