kb.erickguedes.com
Elasticsearch: Busca e Analytics

Aggregations: Análise de Dados

Aula 3 de 6

Agregações no Elasticsearch

Aggregations permitem análises estatísticas e de agrupamento sobre os dados — equivalentes a GROUP BY, COUNT, AVG, SUM do SQL.

Metric Aggs — Métricas Estatísticas

json GET /produtos/_search { "size": 0, "aggs": { "stats_preco": { "stats": { "field": "preco" } }, "preco_avg": { "avg": { "field": "preco" } }, "preco_min": { "min": { "field": "preco" } }, "preco_max": { "max": { "field": "preco" } }, "total_produtos": { "value_count": { "field": "preco" } }, "categorias_distintas": { "cardinality": { "field": "categoria" } } } }

Bucket Aggs — Agrupamento

json GET /produtos/_search { "size": 0, "aggs": { "por_categoria": { "terms": { "field": "categoria", "size": 10, "order": { "_count": "desc" } }, "aggs": { "preco_medio": { "avg": { "field": "preco" } }, "produtos_top": { "top_hits": { "size": 3, "_source": ["nome", "preco"] } } } } } }

Range Agg

json GET /produtos/_search { "size": 0, "aggs": { "faixas_preco": { "range": { "field": "preco", "ranges": [ { "key": "Econômico", "to": 100 }, { "key": "Intermediário", "from": 100, "to": 1000 }, { "key": "Premium", "from": 1000, "to": 5000 }, { "key": "Luxo", "from": 5000 } ] } } } }

Date Histogram — Série Temporal

json GET /vendas/_search { "size": 0, "aggs": { "vendas_por_mes": { "date_histogram": { "field": "data", "calendar_interval": "month", "format": "yyyy-MM", "min_doc_count": 0 }, "aggs": { "receita_total": { "sum": { "field": "valor" } }, "media_movel": { "derivative": { "buckets_path": "receita_total" } } } } } }

Filter e Filters Agg

json GET /produtos/_search { "size": 0, "aggs": { "eletronicos": { "filter": { "term": { "categoria": "eletronicos" } }, "aggs": { "preco_medio": { "avg": { "field": "preco" } } } }, "por_filtros": { "filters": { "filters": { "eletronicos": { "term": { "categoria": "eletronicos" } }, "livros": { "term": { "categoria": "livros" } } } } } } }

Pipeline Aggs

json GET /vendas/_search { "size": 0, "aggs": { "por_mes": { "date_histogram": { "field": "data", "calendar_interval": "month" }, "aggs": { "receita": { "sum": { "field": "valor" } }, "derivada": { "derivative": { "buckets_path": "receita" } }, "media_movel": { "moving_avg": { "buckets_path": "receita", "window": 3 } } } } } }

Composite Agg — Paginação em Aggs

json GET /produtos/_search { "size": 0, "aggs": { "categorias": { "composite": { "size": 100, "sources": [ { "cat": { "terms": { "field": "categoria" } } }, { "preco_faixa": { "histogram": { "field": "preco", "interval": 100 } } } ] }, "aggs": { "total": { "sum": { "field": "preco" } } } } } }

Lab: Dashboard de Vendas

`ash

1. Indexe 100 documentos de vendas (produto, categoria, valor, data, vendedor)

2. Crie agregações:

- Faturamento total (sum), ticket médio (avg), total pedidos (value_count)

- Top 5 produtos mais vendidos (terms + sum)

- Vendas por mês (date_histogram + sum)

- Faixas de valor (range)

3. Adicione pipeline agg (derivative) na série temporal

curl -X GET "http://localhost:9200/vendas/_search?pretty"
-H "Content-Type: application/json"
-d '{"size": 0, "aggs": {"total": {"sum": {"field": "valor"}}}}' `

Aggregations transformam o Elasticsearch em um motor analítico capaz de substituir consultas SQL complexas com performance em tempo real.