Dlaczego Elasticsearch Aggregations to Game Changer?
Elasticsearch aggregations to nie tylko narzędzie do wyszukiwania – to kompletny silnik analityczny. W 2019 roku, gdy big data staje się standardem, potrzebujemy narzędzi które analizują miliony dokumentów w milisekundach. Aggregations pozwalają na tworzenie dashboardów analitycznych, które konkurują z dedykowanymi rozwiązaniami BI, ale działają w czasie rzeczywistym.
Co się nauczysz:
- Jak używać bucket aggregations do grupowania danych według różnych kryteriów
- Wykorzystanie metric aggregations do obliczania statystyk (avg, sum, min, max)
- Tworzenie zagnieżdżonych agregacji dla wielowymiarowej analizy
- Pipeline aggregations do zaawansowanych obliczeń na wynikach innych agregacji
- Optymalizacja wydajności agregacji dla dużych zbiorów danych
- Praktyczne przypadki użycia w analizie logów i metrykach biznesowych
Czym są Elasticsearch Aggregations?
Aggregations w Elasticsearch to framework do analizy danych który pozwala na grupowanie, obliczanie statystyk i transformację danych w locie. W przeciwieństwie do tradycyjnych baz danych, gdzie analiza wymaga osobnych zapytań SQL, Elasticsearch może wykonać zarówno wyszukiwanie jak i analizę w jednym żądaniu.
Trzy główne typy agregacji
Typ agregacji | Zastosowanie | Przykład |
---|---|---|
Bucket | Grupowanie dokumentów | Sprzedaż według miesięcy |
Metric | Obliczanie statystyk | Średnia wartość zamówienia |
Pipeline | Operacje na innych agregacjach | Trend sprzedaży miesiąc do miesiąca |
Bucket Aggregations – Grupowanie Danych
Bucket aggregations dzielą dokumenty na grupy (bucket) według określonych kryteriów. To podstawa większości analiz – najpierw grupujemy, potem analizujemy każdą grupę.
Terms Aggregation – Grupowanie według wartości
Najpopularniejsza agregacja do grupowania według unikalnych wartości pola:
{ "aggs": { "top_categories": { "terms": { "field": "category.keyword", "size": 10 } } } }
Date Histogram – Analiza w czasie
Kluczowa agregacja dla analizy trendów czasowych:
{ "aggs": { "sales_over_time": { "date_histogram": { "field": "timestamp", "calendar_interval": "month", "format": "yyyy-MM-dd" } } } }
Range Aggregation – Grupowanie według przedziałów
Przydatne do analizy segmentów cenowych, wiekowych czy innych zakresów liczbowych:
{ "aggs": { "price_ranges": { "range": { "field": "price", "ranges": [ { "to": 100 }, { "from": 100, "to": 500 }, { "from": 500 } ] } } } }
Metric Aggregations – Obliczanie Statystyk
Metric aggregations obliczają wartości numeryczne na podstawie dokumentów w bucketach lub całego zbioru danych.
Podstawowe metryki statystyczne
{ "aggs": { "price_stats": { "stats": { "field": "price" } }, "total_revenue": { "sum": { "field": "revenue" } }, "avg_order_value": { "avg": { "field": "order_value" } } } }
Percentiles – Analiza rozkładu
Szczególnie przydatne w analizie wydajności i SLA:
{ "aggs": { "response_time_percentiles": { "percentiles": { "field": "response_time", "percents": [50, 95, 99, 99.9] } } } }
Zagnieżdżone Agregacje – Wielowymiarowa Analiza
Prawdziwa moc Elasticsearch agregacji ujawnia się gdy łączymy różne typy w hierarchię:
{ "aggs": { "monthly_sales": { "date_histogram": { "field": "timestamp", "calendar_interval": "month" }, "aggs": { "by_category": { "terms": { "field": "category.keyword" }, "aggs": { "total_revenue": { "sum": { "field": "revenue" } }, "avg_order_value": { "avg": { "field": "order_value" } } } } } } } }
Pipeline Aggregations – Zaawansowane Obliczenia
Pipeline aggregations działają na wynikach innych agregacji, pozwalając na zaawansowane obliczenia jak trendy, moving averages czy derivative.
Derivative – Analiza trendów
Oblicza zmianę wartości między bucketami:
{ "aggs": { "monthly_sales": { "date_histogram": { "field": "timestamp", "calendar_interval": "month" }, "aggs": { "total_sales": { "sum": { "field": "revenue" } }, "sales_trend": { "derivative": { "buckets_path": "total_sales" } } } } } }
Moving Average – Wygładzanie trendów
Przydatne do filtrowania szumu w danych czasowych:
{ "aggs": { "daily_orders": { "date_histogram": { "field": "timestamp", "calendar_interval": "day" }, "aggs": { "order_count": { "value_count": { "field": "order_id" } }, "smoothed_orders": { "moving_avg": { "buckets_path": "order_count", "window": 7, "model": "simple" } } } } } }
Optymalizacja Wydajności Agregacji
Najlepsze praktyki wydajnościowe
{ "query": { "bool": { "filter": [ { "range": { "timestamp": { "gte": "2019-01-01", "lte": "2019-12-31" } } } ] } }, "aggs": { "filtered_analysis": { "terms": { "field": "category.keyword", "size": 10 } } } }
Praktyczne Przypadki Użycia
Dashboard e-commerce
{ "size": 0, "query": { "range": { "timestamp": { "gte": "now-30d" } } }, "aggs": { "daily_revenue": { "date_histogram": { "field": "timestamp", "calendar_interval": "day" }, "aggs": { "revenue": { "sum": { "field": "total_amount" } } } }, "top_products": { "terms": { "field": "product_name.keyword", "size": 5 }, "aggs": { "quantity_sold": { "sum": { "field": "quantity" } } } }, "conversion_funnel": { "filters": { "filters": { "views": { "term": { "event_type": "product_view" } }, "cart_adds": { "term": { "event_type": "add_to_cart" } }, "purchases": { "term": { "event_type": "purchase" } } } } } } }
Analiza logów aplikacji
{ "aggs": { "error_analysis": { "filter": { "term": { "log_level": "ERROR" } }, "aggs": { "by_service": { "terms": { "field": "service_name.keyword" }, "aggs": { "error_count": { "value_count": { "field": "timestamp" } }, "top_errors": { "terms": { "field": "error_message.keyword", "size": 3 } } } } } } } }
Integracja z Kibana
Kibana automatycznie tłumaczy wizualizacje na odpowiednie agregacje Elasticsearch. Każdy chart w Kibana to pod spodem jedna lub więcej agregacji:
– **Line/Area charts** → Date histogram + metric aggregations
– **Pie charts** → Terms aggregation
– **Data tables** → Terms + metric aggregations
– **Heatmaps** → Date histogram + terms + metric
Tak! Agregacje działają na wynikach query. Możesz najpierw przefiltrować dokumenty zapytaniem, a potem agregować tylko te które pasują do kryteriów.
Teoretycznie bez limitu, ale każdy poziom zwiększa złożoność obliczeniową. W praktyce 3-4 poziomy to rozsądny maksyum dla wydajności.
Tak, agregacje obliczają wyniki na żywo z aktualnych danych. Nie ma potrzeby pre-obliczania jak w tradycyjnych systemach BI.
Użyj parametru size aby ograniczyć wyniki. Domyślnie Elasticsearch zwraca top 10. Uważaj na high cardinality fields – mogą powodować problemy z pamięcią.
Agregacje wykorzystują CPU i pamięć. Skomplikowane agregacje na dużych zbiorach danych mogą spowolnić klaster. Zawsze monitoruj metryki wydajności i używaj appropriate node roles.
Elasticsearch automatycznie cache’uje niektóre części agregacji. Możesz też użyć frozen indices dla historycznych danych które analizujesz rzadziej.
Użyj parametru missing w agregacji aby zdefiniować wartość zastępczą dla dokumentów bez danego pola.
🚀 Zadanie dla Ciebie
Stwórz dashboard analityczny dla e-commerce który pokazuje:
- Dzienny trend sprzedaży z ostatnich 30 dni
- Top 5 kategorii produktów według przychodów
- Średnią wartość zamówienia dla każdej kategorii
- Conversion rate (stosunek purchases do views) w rozbiciu na urządzenia
Użyj zagnieżdżonych agregacji i sprawdź wydajność na większym zbiorze danych. Bonus: dodaj moving average dla trendu sprzedaży.