10 - Agregace

 

Elasticsearch není jen vyhledávací engine, je také analytický engine. Pomocí agregací lze získat přehled o datech uložených v Elasticsearch.

 

Aggregations syntax

Agregace se zapisují do těla requestu pod klíč aggregations, případně zkráceně aggs:

Agregací je možné počítat více zároveň:

Nebo je možné agregace zanořovat:

Název agregace si lze zvolit libovolný. Pokud jsou agregace zanořeny, počítají se vnořené agregace pro jednotlivé skupiny agregací na vyšší úrovni. Pokud budeme chtít spočítat průměrnou cenu objednávky každý den, napíšeme nepjrve agregaci, která data rozdělí po dnech (bucket - např. date_histogram) a následně použijeme agregaci vnořenou (metric - např. avg).

S agregacemi se budeme setkávat také v Kibaně - veškeré vizualizace získávají data právě pomocí vizualizací.

Agregací existuje několik druhů, které se liší způsobem, kterým pracují s daty:

 

Bucket aggregations

Prvním typem agregací jsou tzv. bucket agregace. Ty seskupí hodnoty ve vyhledaných dokumentech podle daných pravidel do skupin. Jde o alternativu k GROUP BY relačních databází.

 

Metric aggregations

Druhým typem agregací jsou ty, které provádějí statistické výpočty nad nalezenými produkty - minima, maxima nebo průměry.

 

Pipeline aggregations

Speciální druh agregací, které namísto práce s dokumenty pracují s výsledky agregací. Obecně existují dva typy takových agregací:

Parent agregace pracují s výsledky nadřazených agregací a přidávají do nich další výsledky výpočtů. Zpravidla je třeba uvést cestu, s kterou nadřazenou agregací pracují jako buckets_path.

Sibling agregace pracují s výsledky agregací na shodné úrovni.

Příkladem pipeline agregace může být cumulative_sum, která přičítává hodnoty jednotlivých výsledků agregace. Lze ji použít například pro výpočet stavu účtu na základě jednotlivých transakcí:

Dalším příkladem může být bucket_sort . Pokud bychom chtěli seřadit měsíce podle největších zústatků na účtu, bylo by to možné následujícím způsobem:

 

Post filter

V případě kombinace vyhledávání a agregací je třeba někdy vypočítat agregace před samotnou filtrací. V takovém případě je možné tyto filtrace přesunout do sekce post_filter zapsané na najvyšší úrovni request body. Příkladem může být e-shop, kde nejprve spočítám data pro filtry pomocí agregací a následně pomocí post_filter vyfiltruji data podle zaškrtaných hodnot v uživatelském filtru.

 

Úkol: agregace

V indexu kibana_sample_data_ecommerce:

  1. Vypište email adresy, které vytvořily nejvíc objednávek
  2. Pro každý day_of_week zjistěte průměrnou cenu objednávky (s použitím pole taxful_total_price)
  3. Vyfiltrujte data podle pole geoip.continent_name s hodnotou North America (můžete použít term query); poté pro každé pohlaví (customer_gender) spočítejte průměrný počet produktů (použijte avg agregaci a pole total_unique_products)

 

Kibana visualizations

Kibana využívá agregace pro tvorbu vizualizací. Ty je možné vytvořit prostřednictvím Visualize Library:

Visualize_Library_-_Elastic

Zvolte Aggregation based visualizations:

Visualize_Library_-_Elastic-5568177

Poté zvolte libovolný typ agregace, např. Line:

Visualize_Library_-_Elastic-5568254

V posledním kroku zvolte data, která mají být pomocí vizualizace zobrazena - Data view, nebo uložená tabulka Discover:

Visualize_Library_-_Elastic-5568392

V nově vytvořené vizualizaci lze zvolit metrickou agregaci, která bude reprezentována na ose Y a bucket agregaci, která se promítne na osu X.

Visualize_Library_-_Elastic-5568622

Kompletní vizualizaci je možné uložit a případně přidat na dashboard:

Visualize_Library_-_Elastic-5568744

Dashboard je stránka v Kibaně sestávající z více vizualizací:

New_Dashboard_-_Elastic