Skip to content

11 ‐ Search

inhogoes edited this page May 21, 2026 · 8 revisions

11.1 - Elasticsearch como plataforma de Search AI

O Elastic Stack é organizado em torno de quatro soluções: Observabilidade, Segurança, Search e a infraestrutura que sustenta todas elas. Este capítulo cobre o pilar Search com foco nas funcionalidades de inteligência artificial do Elasticsearch 9.x.

A evolução da busca no Elasticsearch seguiu uma trajetória clara:

Busca por palavras-chave (BM25)
        ↓
Busca semântica (ELSER / sparse vectors)
        ↓
Busca híbrida (BM25 + semântico com RRF)
        ↓
RAG — Retrieval Augmented Generation (busca + LLM)
        ↓
Agentes de IA com acesso a ferramentas e dados

Cada camada adicionou capacidade sem substituir a anterior. Em 2026, uma implementação moderna de busca usa todas essas camadas em conjunto.


11.2 - Conceitos fundamentais de busca com IA

BM25 — a base

O BM25 é o algoritmo padrão do Elasticsearch desde a versão 5.x. Calcula relevância com base na frequência do termo no documento e na raridade do termo no índice. Limitação: só encontra o que está literalmente escrito. Buscar "problema de conexão" não retorna documentos que falam em "falha de rede" ou "timeout".

ELSER — busca semântica da Elastic

O ELSER (Elastic Learned Sparse EncodeR) é o modelo de busca semântica desenvolvido pela Elastic. Em vez de comparar palavras, ele expande o texto em termos associados com seus pesos de relevância:

"problema de conexão" → { "rede": 0.82, "falha": 0.71, "timeout": 0.65, "conectividade": 0.58, ... }

Vantagens:

  • Não requer fine-tuning — funciona out-of-the-box em qualquer domínio
  • Recomendado para documentos em inglês
  • Para outros idiomas, use o modelo E5 (multilingual)

semantic_text — o campo que simplifica tudo

Tipo de campo introduzido no 8.15 e GA no 9.x. Você declara o campo como semantic_text, associa a um endpoint de inferência, e o Elasticsearch gera os embeddings automaticamente na indexação e executa a busca semântica quando você usa a query semantic. Zero configuração de pipeline.

Hybrid Search com RRF

Combina BM25 e busca semântica em um único resultado usando RRF (Reciprocal Rank Fusion). O RRF pondera os rankings de cada abordagem — documentos bem ranqueados em ambas as listas sobem no resultado final. Na prática, supera as duas abordagens individuais na maioria dos casos.

RAG — Retrieval Augmented Generation

Arquitetura que combina busca com LLM. O sistema busca os documentos mais relevantes no Elasticsearch e os passa como contexto para o LLM gerar a resposta. Resultado: o LLM responde com base nos seus dados reais, não nos dados de treinamento — reduzindo alucinações e permitindo responder sobre dados privados ou recentes.


11.3 - Cloud Connect e Elastic Inference Service

O Cloud Connect é o mecanismo que permite conectar um cluster self-managed aos serviços da Elastic Cloud sem migrar os dados ou alterar a arquitetura. Com ele, o cluster local passa a usar a infraestrutura de GPU da Elastic para inferência de modelos.

O EIS (Elastic Inference Service) é o serviço de inferência gerenciado pela Elastic que roda na Cloud. Ao conectar o cluster via Cloud Connect, o EIS disponibiliza automaticamente:

  • Endpoints de inferência ELSER (busca semântica)
  • Endpoints de embedding multilingual (E5)
  • LLMs gerenciados pela Elastic — disponíveis para o AI Assistant, o Agent Builder e o Search Playground sem precisar configurar API key de provedor externo
  • Reranking de resultados de busca

O que muda na prática: sem o EIS, para usar ELSER você precisaria de um node ML com 4GB+ dedicado, baixar e inicializar o modelo localmente, e gerenciar a infraestrutura de inferência. Com o EIS via Cloud Connect, nada disso é necessário — o processamento acontece na infraestrutura da Elastic e os resultados voltam para o cluster.

Requisito de licença: o EIS via Cloud Connect requer licença Enterprise no cluster self-managed. O trial de 30 dias que ativamos nos labs anteriores é suficiente. A conta na Elastic Cloud pode ser o tier gratuito — a API key gerada lá é suficiente para estabelecer a conexão.


11.4 - Laboratório 1: conectando o cluster ao EIS via Cloud Connect

Neste laboratório vamos criar uma conta gratuita na Elastic Cloud, gerar a Cloud Connect API key e conectar o cluster self-managed ao Elastic Inference Service.

Passo 1 — Criar a conta na Elastic Cloud

  1. Acesse cloud.elastic.co
  2. Clique em Start free trial — não é necessário cartão de crédito
  3. Preencha os dados e confirme o email
  4. Após login, você estará no painel da Elastic Cloud

Não é necessário criar nenhum deployment na Cloud. Apenas a conta é necessária para gerar a Cloud Connect API key.

Passo 2 — Gerar a Cloud Connect API key

  1. No painel da Elastic Cloud, clique no avatar no canto superior direito
  2. Selecione Organization
  3. Clique na aba API keys
  4. Clique em Create API key
  5. Dê um nome descritivo — ex: cloud-connect-treinamento
  6. Clique em Create API key
  7. Copie e salve a key — ela é exibida apenas uma vez

Passo 3 — Ativar o trial Enterprise no cluster local

O EIS via Cloud Connect requer licença Enterprise. Ative o trial de 30 dias:

POST /_license/start_trial?acknowledge=true

Verifique:

GET /_license

O campo type deve mostrar trial.

Passo 4 — Conectar o cluster ao Cloud Connect

  1. No Kibana local, use a barra de busca global (ícone de lupa ou Ctrl+/) e pesquise por Cloud Connect
  2. Clique em Cloud Connect nos resultados
  3. Você verá a tela exibida na imagem do lab — com os campos de Sign up / Log in e o campo para colar a API key
  4. Cole a Cloud Connect API key gerada no Passo 2
  5. Clique em Connect

O Kibana vai verificar a chave e confirmar a conexão.

Passo 5 — Conectar o Elastic Inference Service

Após conectar ao Cloud Connect, a tela de Cloud connected services vai mostrar os serviços disponíveis — incluindo o Elastic Inference Service.

  1. Clique em Connect ao lado do Elastic Inference Service
  2. Aguarde a configuração ser concluída — pode levar alguns segundos

Após a conexão, o Elasticsearch cria automaticamente os endpoints de inferência no cluster:

GET /_inference

Você verá os endpoints criados automaticamente:

  • .elser-2-elastic — busca semântica em inglês
  • .multilingual-e5-small-elastic — busca semântica multilingual
  • .rerank-elastic — reranking de resultados

Esses endpoints estão prontos para uso sem nenhuma configuração adicional.

Passo 6 — Verificar os conectores no Kibana

Acesse Stack Management → AI → GenAI Settings (a tela da imagem 1 do lab).

Você verá que agora há um modelo conectado — o Kibana detectou os LLMs gerenciados pelo EIS e configurou os conectores automaticamente. O aviso "No Large Language Model detected" desapareceu.

A seção Documentation mostra dois pacotes disponíveis para instalar: Elastic documentation e Security labs. Instale os dois — eles alimentam o AI Assistant com documentação oficial da Elastic, tornando as respostas mais precisas para perguntas sobre o próprio Elasticsearch.


11.5 - AI Assistant

O AI Assistant é o assistente de inteligência artificial integrado ao Kibana. Ele aparece no canto superior direito da interface (ícone "AI Agent") e pode ser acessado de qualquer página do Kibana.

O que o AI Assistant pode fazer

Responder perguntas técnicas sobre o Elastic Stack:

  • "Como configuro uma ILM policy com fase warm e cold?"
  • "Qual a diferença entre text e keyword?"
  • "Por que meu cluster está em status yellow?"

Com a documentação oficial instalada (Passo 6 do lab anterior), as respostas são fundamentadas na documentação atual do produto — não no conhecimento de treinamento do LLM que pode estar desatualizado.

Analisar dados do cluster em contexto: O AI Assistant tem acesso às ferramentas do Elasticsearch e pode executar queries, analisar resultados e interpretar o estado do cluster diretamente durante a conversa.

Auxiliar na criação de queries e visualizações: Você pode descrever o que quer ver e o assistente sugere a query ou a configuração de visualização correspondente.

Ajudar na investigação de incidentes (Observability e Security): Quando aberto no contexto de um alerta ou de uma investigação de segurança, o assistente tem acesso ao contexto daquele evento e pode auxiliar na análise.

Acessando o AI Assistant

Ícone "AI Agent" no canto superior direito do Kibana → aparece em qualquer página

Ou via atalho de teclado: Ctrl + ; (Windows/Linux) / Cmd + ; (Mac)

Lab — conversando com o AI Assistant

Passo 1 — Abrir o AI Assistant

Clique no ícone AI Agent no canto superior direito.

Passo 2 — Fazer perguntas sobre o cluster

Tente as seguintes perguntas e observe as respostas:

Qual é o estado atual do meu cluster?
Tenho um índice chamado artigos-tecnologia. Quantos documentos ele tem?
Como posso verificar se o ILM está funcionando corretamente nos meus índices?

Passo 3 — Pedir ajuda para criar uma query

Me ajude a criar uma query que busca documentos com o campo 'nivel' igual a 'ERROR' 
no índice informacoes_pessoas, ordenados por data decrescente

O assistente vai gerar a query, explicar o que ela faz, e você pode executá-la diretamente no Dev Tools.

Passo 4 — Perguntar sobre documentação

Qual é a diferença entre forcemerge e merge no Elasticsearch?
Quando devo usar o tipo de campo nested em vez de object?

Com a documentação oficial instalada, as respostas vão citar as fontes da documentação da Elastic.

Passo 5 — Pedir análise do estado do cluster

Analise os índices do meu cluster e me diga se há algo que precisa de atenção

O assistente vai consultar o cluster e retornar uma análise baseada nos dados reais.


11.6 - Agent Builder

O Agent Builder permite criar agentes de IA customizados — assistentes especializados com instruções específicas, acesso a fontes de dados determinadas e comportamento configurável. Enquanto o AI Assistant é um assistente genérico do Elastic Stack, o Agent Builder permite criar assistentes especializados para casos de uso específicos do seu negócio.

Casos de uso

  • Agente de suporte técnico: configurado para responder perguntas sobre os seus sistemas internos, com acesso aos índices de logs e documentação interna
  • Agente de análise de segurança: especializado em analisar alertas do SIEM e sugerir próximos passos de investigação
  • Agente de observabilidade: focado em diagnosticar problemas de performance com acesso aos dados de APM e métricas

Componentes de um agente

Instructions (System Prompt): as instruções que definem o comportamento do agente. Define a personalidade, as restrições, o escopo de atuação e o formato das respostas.

Knowledge sources: os índices do Elasticsearch que o agente pode consultar para fundamentar suas respostas. O agente faz busca semântica nesses índices antes de gerar cada resposta — é RAG aplicado a um agente customizado.

Tools: as ações que o agente pode executar além de buscar documentos — executar queries, chamar APIs externas, criar casos no Security.

Lab — criando um agente especializado em Elasticsearch

Passo 1 — Acessar o Agent Builder

Menu → Search → Agent Builder (ou pesquise "Agent Builder" na barra de busca global)

Passo 2 — Criar um novo agente

Clique em Create agent.

Passo 3 — Configurar as instruções

No campo Instructions, cole o seguinte system prompt:

Você é um especialista em Elasticsearch e Elastic Stack. 
Seu nome é ElasticBot.
 
Responda sempre em português brasileiro.
 
Você pode:
- Explicar conceitos do Elasticsearch como mapping, shards, ILM, aggregations
- Ajudar a criar queries e configurações
- Analisar problemas de performance e sugerir soluções
- Explicar erros e como resolvê-los
 
Quando não tiver certeza de algo, diga claramente que não sabe 
em vez de inventar uma resposta.
 
Seja objetivo e técnico. Cite exemplos de queries ou configurações 
sempre que fizer sentido.

Passo 4 — Adicionar knowledge sources

  1. Em Knowledge sources, clique em Add index
  2. Selecione o índice artigos-tecnologia criado nos labs anteriores
  3. O agente vai usar esses documentos como base de conhecimento ao responder

Passo 5 — Testar o agente

No painel de teste à direita, experimente perguntas:

O que é ELSER e quando devo usá-lo?
Tenho um índice com dados de logs que está crescendo sem controle. O que fazer?
Explique a diferença entre busca por palavras-chave e busca semântica

Observe como as respostas combinam o conhecimento do LLM com os documentos indexados — o agente vai citar informações dos artigos quando relevante.

Passo 6 — Publicar o agente

  1. Dê um nome ao agente — ex: ElasticBot
  2. Clique em Save
  3. O agente agora aparece como opção no AI Assistant — clique no ícone AI Agent e troque de "AI Agent" para "ElasticBot"

11.7 - Search Playground

O Search Playground é uma interface dentro do Kibana para experimentar RAG com os seus dados. Com o EIS conectado, o Playground usa os LLMs gerenciados pela Elastic automaticamente — sem precisar configurar API key de provedor externo.

Acessando o Playground

Menu → Search → Playground

Com o EIS conectado, o Playground já mostra "LLM Connected" — os modelos gerenciados pela Elastic estão disponíveis.

Lab — usando o Playground com os dados do treinamento

Passo 1 — Selecionar os dados

  1. No Playground, clique em Add data sources
  2. Selecione o índice artigos-tecnologia
  3. Clique em Save

Passo 2 — Fazer perguntas

Como posso diagnosticar lentidão em queries do banco de dados?
Quais são as boas práticas de segurança para APIs REST?

Observe as citações abaixo de cada resposta — o Playground mostra quais documentos foram usados para gerar a resposta.

Passo 3 — Explorar a query por baixo

  1. Clique em Query na barra superior
  2. Veja a query Elasticsearch que está sendo executada para buscar o contexto
  3. Experimente trocar a query de semantic para match e observe como as respostas mudam dependendo dos documentos recuperados

Passo 4 — Ver o código gerado

  1. Clique em View code
  2. O Kibana gera o código Python completo do pipeline RAG
  3. Esse código pode ser baixado como ponto de partida para uma aplicação real

11.8 - Laboratório 2: busca semântica com ELSER via EIS

Com o EIS conectado, o endpoint .elser-2-elastic está disponível. Vamos criar um índice com semantic_text e comparar resultados de busca por palavras-chave versus busca semântica.

Passo 1 — Criar o índice com semantic_text

PUT /artigos-tecnologia
{
  "mappings": {
    "properties": {
      "titulo":   { "type": "text" },
      "conteudo": { "type": "text" },
      "conteudo_semantico": {
        "type": "semantic_text",
        "inference_id": ".elser-2-elastic"
      }
    }
  }
}

Passo 2 — Indexar documentos

POST /_bulk
{ "index": { "_index": "artigos-tecnologia", "_id": "1" } }
{ "titulo": "Problemas de conectividade em redes corporativas", "conteudo": "Falhas de rede podem ocorrer por diversos motivos: timeout de conexão, roteamento incorreto, firewall bloqueando portas, ou sobrecarga do servidor DNS. O diagnóstico começa pela verificação da camada física e sobe até a camada de aplicação.", "conteudo_semantico": "Falhas de rede podem ocorrer por diversos motivos: timeout de conexão, roteamento incorreto, firewall bloqueando portas, ou sobrecarga do servidor DNS. O diagnóstico começa pela verificação da camada física e sobe até a camada de aplicação." }
{ "index": { "_index": "artigos-tecnologia", "_id": "2" } }
{ "titulo": "Otimização de queries em bancos de dados relacionais", "conteudo": "Queries lentas em bancos de dados geralmente são causadas por falta de índices, planos de execução ineficientes, ou excesso de JOINs. O uso de EXPLAIN ANALYZE revela o custo de cada operação e indica onde otimizar.", "conteudo_semantico": "Queries lentas em bancos de dados geralmente são causadas por falta de índices, planos de execução ineficientes, ou excesso de JOINs. O uso de EXPLAIN ANALYZE revela o custo de cada operação e indica onde otimizar." }
{ "index": { "_index": "artigos-tecnologia", "_id": "3" } }
{ "titulo": "Kubernetes: escalabilidade automática de pods", "conteudo": "O Horizontal Pod Autoscaler (HPA) escala automaticamente o número de pods com base em métricas de CPU, memória ou métricas customizadas. A configuração envolve definir o número mínimo e máximo de réplicas e o threshold de utilização.", "conteudo_semantico": "O Horizontal Pod Autoscaler (HPA) escala automaticamente o número de pods com base em métricas de CPU, memória ou métricas customizadas. A configuração envolve definir o número mínimo e máximo de réplicas e o threshold de utilização." }
{ "index": { "_index": "artigos-tecnologia", "_id": "4" } }
{ "titulo": "Segurança em APIs REST: autenticação e autorização", "conteudo": "APIs REST devem implementar autenticação via tokens JWT ou OAuth 2.0. A autorização é feita verificando as permissões do token antes de executar cada operação. Ataques comuns incluem injection, broken authentication e excessive data exposure.", "conteudo_semantico": "APIs REST devem implementar autenticação via tokens JWT ou OAuth 2.0. A autorização é feita verificando as permissões do token antes de executar cada operação. Ataques comuns incluem injection, broken authentication e excessive data exposure." }
{ "index": { "_index": "artigos-tecnologia", "_id": "5" } }
{ "titulo": "Monitoramento de aplicações com métricas e alertas", "conteudo": "O monitoramento eficaz combina métricas de sistema (CPU, memória, disco) com métricas de aplicação (latência, taxa de erros, throughput). Alertas devem ser configurados com thresholds dinâmicos para evitar ruído.", "conteudo_semantico": "O monitoramento eficaz combina métricas de sistema (CPU, memória, disco) com métricas de aplicação (latência, taxa de erros, throughput). Alertas devem ser configurados com thresholds dinâmicos para evitar ruído." }

Aguarde alguns segundos após indexar. O EIS processa os campos semantic_text em background — os embeddings são gerados na infraestrutura da Elastic e armazenados no cluster local.

Passo 3 — Busca por palavras-chave (BM25)

GET /artigos-tecnologia/_search
{
  "query": {
    "match": {
      "conteudo": "aplicação lenta"
    }
  }
}

Anote quais artigos retornaram e com qual score.

Passo 4 — Busca semântica

GET /artigos-tecnologia/_search
{
  "query": {
    "semantic": {
      "field": "conteudo_semantico",
      "query": "aplicação lenta"
    }
  }
}

Compare com os resultados anteriores. A busca semântica deve retornar artigos sobre queries lentas de banco de dados e monitoramento — mesmo sem as palavras "aplicação lenta" estarem nesses documentos.

Passo 5 — Hybrid Search com RRF

GET /artigos-tecnologia/_search
{
  "retriever": {
    "rrf": {
      "retrievers": [
        {
          "standard": {
            "query": {
              "match": { "conteudo": "aplicação lenta" }
            }
          }
        },
        {
          "standard": {
            "query": {
              "semantic": {
                "field": "conteudo_semantico",
                "query": "aplicação lenta"
              }
            }
          }
        }
      ],
      "rank_window_size": 10,
      "rank_constant": 60
    }
  }
}

Compare os três resultados: BM25, semântico e híbrido. O RRF combina os rankings das duas abordagens.


11.9 - Reindexação com _reindex

O _reindex é a operação padrão para migrar dados entre índices — necessário sempre que você precisa mudar o mapping de um índice existente ou adicionar novas capacidades como semantic_text a dados já indexados.

POST /_reindex
{
  "source": {
    "index": "indice-original"
  },
  "dest": {
    "index": "indice-novo"
  }
}

Acompanhar o progresso:

GET /_tasks?actions=*reindex&detailed=true

Padrão de produção — migrar com alias:

POST /_aliases
{
  "actions": [
    { "remove": { "index": "indice-original", "alias": "meus-dados" } },
    { "add":    { "index": "indice-novo",      "alias": "meus-dados" } }
  ]
}

Qualquer aplicação que usa o alias continua funcionando sem alteração — a migração é transparente.


11.10 - Cross-cluster Search

Permite executar buscas em múltiplos clusters a partir de um único ponto. Útil quando os dados estão distribuídos geograficamente por regulamentação ou organização.

Configuração:

PUT /_cluster/settings
{
  "persistent": {
    "cluster.remote.cluster-remoto.seeds": ["ip-remoto:9300"]
  }
}

Busca cross-cluster:

GET /cluster-remoto:indice-remoto,indice-local/_search
{
  "query": { "match_all": {} }
}

Clone this wiki locally