Acesse o painel da sua conta

Não tem uma conta? Registrar

Entrar em contato

Visite também nosso site craftxp.com.br

  • img
  • img
  • img
  • img
  • img
  • img

Entre em contato

Elasticsearch na Pratica: Busca Full-Text e Analise Distribuida com ELK Stack

Elasticsearch na Pratica: Busca Full-Text e Analise Distribuida com ELK Stack

O que e o Elasticsearch?

O Elasticsearch e um motor de busca e analise distribuido, open-source, construido sobre o Apache Lucene. Ele permite armazenar, pesquisar e analisar grandes volumes de dados em tempo real, com respostas tipicamente em milissegundos.

Parte do Elastic Stack (ELK — Elasticsearch, Logstash, Kibana), o Elasticsearch e a escolha padrao para busca full-text, analise de logs, monitoramento de infraestrutura, observabilidade e aplicacoes de e-commerce que exigem busca relevante e facetada.

Conceitos Fundamentais

  • Indice (Index): Colecao de documentos com caracteristicas semelhantes, equivalente a uma tabela em bancos relacionais.
  • Documento: Unidade basica de informacao, armazenada em JSON.
  • Mapeamento (Mapping): Esquema que define como os campos sao indexados e armazenados.
  • Shard: Unidade de trabalho que contem um subconjunto dos dados de um indice.
  • Replica: Copia de um shard primario, usada para alta disponibilidade.
  • No (Node): Instancia do Elasticsearch em execucao.
  • Cluster: Conjunto de nos que processam dados de forma distribuida.

Arquitetura Distribuida

O Elasticsearch foi projetado desde o inicio para escala horizontal. Quando voce cria um indice, ele e dividido em shards. Cada shard e um indice Lucene completo, distribuido entre os nos do cluster:

# Cluster com 3 nos e indice com 5 shards + 2 replicas

Node A → Shard 0 (P), Shard 1 (R), Shard 3 (R)
Node B → Shard 1 (P), Shard 2 (R), Shard 4 (R)
Node C → Shard 2 (P), Shard 3 (P), Shard 4 (P), Shard 0 (R)

Se um no falha, os shards primarios que estavam nele sao promovidos a partir das replicas em outros nos, garantindo disponibilidade continua.

Indexacao e Consultas

A indexacao no Elasticsearch transforma textos brutos em estruturas pesquisaveis usando analise lexical (tokenizacao, stemming, filtros).

Criando um Indice com Mapeamento

PUT /produtos
{
  "mappings": {
    "properties": {
      "nome": { "type": "text", "analyzer": "standard" },
      "preco": { "type": "float" },
      "categoria": { "type": "keyword" }
    }
  }
}

Inserindo Documentos

POST /produtos/_doc/1
{
  "nome": "Notebook Gamer Ultra",
  "preco": 7499.90,
  "categoria": "eletronicos"
}

Buscas Full-Text com Query DSL

GET /produtos/_search
{
  "query": {
    "bool": {
      "must": [{ "match": { "nome": "notebook gamer" } }],
      "filter": [{ "range": { "preco": { "gte": 3000 } } }]
    }
  },
  "sort": [{ "preco": "asc" }],
  "aggs": {
    "por_categoria": {
      "terms": { "field": "categoria" }
    }
  }
}

Agregacoes: Analise em Tempo Real

As agregacoes sao o equivalente ao GROUP BY do SQL, permitindo criar dashboards e relatorios em tempo real:

GET /vendas/_search
{
  "size": 0,
  "query": { "range": { "data": { "gte": "2026-01-01" } } },
  "aggs": {
    "vendas_por_mes": {
      "date_histogram": {
        "field": "data",
        "calendar_interval": "month"
      },
      "aggs": {
        "total": { "sum": { "field": "valor" } },
        "top_produtos": {
          "terms": { "field": "produto", "size": 5 }
        }
      }
    }
  }
}

Principais tipos: Bucket (terms, range, date_histogram), Metric (sum, avg, min, max) e Pipeline (derivative, moving_avg).

Elasticsearch com Python

from elasticsearch import Elasticsearch

# Conectar ao cluster
es = Elasticsearch(["http://localhost:9200"])

# Indexar um documento
doc = {
    "titulo": "Introducao ao Elasticsearch",
    "conteudo": "Guia completo sobre busca e analise distribuida...",
    "tags": ["elasticsearch", "busca", "python"],
    "data": "2026-05-28"
}
resp = es.index(index="artigos", id=1, document=doc)
print(f"Indexado: {resp['result']}")

# Buscar documentos
resp = es.search(
    index="artigos",
    query={"match": { "conteudo": "busca distribuida" }},
    size=10
)
for hit in resp["hits"]["hits"]:
    print(f'Score: {hit["_score"]:.2f} | {hit["_source"]["titulo"]}')

# Agregacao
resp = es.search(
    index="artigos",
    aggs={"por_tag": {"terms": {"field": "tags", "size": 10}}}
)
for bucket in resp["aggregations"]["por_tag"]["buckets"]:
    print(f'{bucket["key"]}: {bucket["doc_count"]} artigos')

Ecossistema Elastic Stack

  • Kibana: Interface grafica para dashboards, exploracao de logs e gerenciamento do cluster.
  • Logstash: Pipeline de processamento que ingere, transforma e envia dados.
  • Beats: Agentes leves (Filebeat, Metricbeat, Heartbeat) para coleta de dados.
  • Elastic APM: Monitoramento de performance de aplicacoes com tracing distribuido.
  • Elasticsearch SQL: Consultas em SQL tradicional sobre dados no Elasticsearch.

Casos de Uso Reais

  1. Busca em E-commerce: Milhoes de produtos com autocomplete, correcao ortografica e relevância.
  2. Centralizacao de Logs: Agregar logs de centenas de microsservicos para troubleshooting.
  3. Observabilidade (APM): Rastreamento distribuido de requisicoes e metricas de performance.
  4. Analise de Seguranca (SIEM): Correlacao de eventos de seguranca em tempo real.
  5. Busca Geoespacial: Consultas de proximidade geografica com filtros por categorias.

Boas Praticas em Producao

  • Mapeamento Explicito: Defina mappings manualmente para evitar tipos inesperados.
  • Indices por Data: Use ILM (Index Lifecycle Management) para gerenciar retencao e backup.
  • Shards Adequados: Cada shard entre 10GB e 50GB e o ponto ideal.
  • Refresh Interval: Ajuste para 30s em cenarios de escrita intensiva.
  • Monitoramento: Acompanhe JVM heap, search rate e indexing rate com o Kibana.
  • Seguranca: Habilite autenticacao, TLS e RBAC em producao.

Conclusao

O Elasticsearch transformou a forma como lidamos com busca e analise de dados em escala. Com sua API REST elegante, arquitetura distribuida e ecossistema completo, ele e a ferramenta certa para qualquer cenario que exija respostas rapidas sobre grandes volumes de dados.

Comece baixando o Elasticsearch e o Kibana, suba um cluster de desenvolvimento com Docker Compose, indexe seus primeiros documentos e explore o poder das consultas full-text e agregacoes.

Craft XP
Craft XP