Motor de Busca OpenSearch: Navegação Facetada em Larga Escala
Compartilho detalhes técnicos da implementação de um motor de pesquisa avançada para uma plataforma de larga escala, substituindo infraestrutura legada por uma arquitetura distribuída e de alta performance.
Contexto
Substituição da infraestrutura legada de um motor de busca de questões do Questões Mais por uma solução moderna baseada em Amazon OpenSearch Service. O objetivo era trazer a experiência ágil de navegação facetada padrão e-commerce para a busca de questões educacionais educacionais em larga escala.
A solução core foi construída em NestJS, orquestrando requisições entre Amazon OpenSearch Serverless (AOSS), Redis e Aurora PostgreSQL através do Prisma ORM.
Desafios Arquiteturais e Soluções Aplicadas
Navegação Facetada
Uso de per-facet filter aggregations para reatividade na contagem de filtros, com composite aggregations e match_phrase_prefix para paginação e busca fuzzy ativa.
Resiliência & Cache
Cache distribuído no Redis via Pipeline. A volumetria (>1.5M) ditou o Hard TTL e um fallback de 3s para o Aurora PostgreSQL para prevenir timer leaks.
Algoritmo de Trending
Decaimento exponencial cruzando engajamento numérico (visualizações) e tempo para destacar conteúdos genuinamente relevantes (c/ cache SWR).
Filtros e Presets
CRUD de presets com indexação por colunas JsonB e GIN no PostgreSQL para assegurar schemas complexos sem gargalos de deserialização.
Segurança AWS
Autenticação nativa e dinâmica com Amazon OpenSearch Serverless, assinando requisições e suportando Roles IAM e credenciais temporárias.
Resultado
O resultado: um ecossistema de pesquisa escalável, com respostas sustentadas na ordem dos milissegundos e preparado, em nível de arquitetura, para suportar o crescimento orgânico contínuo da plataforma de modo resiliente e seguro.
Blueprint Técnico
Abaixo, os detalhes da arquitetura implementados neste case de alta complexidade.
1. Visão Geral da Arquitetura
O módulo de buscas avançadas do Questões Mais contempla uma rota híbrida, unindo os poderes textuais do OpenSearch com as entidades de negócio via Prisma, e distribuindo o processamento com Redis.
2. Módulo OpenSearch e Autenticação Dinâmica (SigV4)
A orquestração do serviço detecta dinamicamente a presença de credenciais da AWS para aplicar a autenticação com proteção de acessos rigorosa, assinando os cabeçalhos (Authorization, x-amz-date e x-amz-security-token):
- Ambiente AWS Provisionado (AOSS): Utiliza
@aws-sdk/signature-v4e@aws-crypto/sha256-jspara assinar via IAM Roles de leitura (os-read-questoes-mais). - Ambiente Local: Adota Basic Auth standard.
3. Rotas da Busca Avançada e Motor de Facets
Hydration de entidades via Prisma (excesso de restrições ou 'minhas_questoes=resolvidas') na API antes de gerar IPs e inclusões para a Query final ao Elastic.
O motor processa os post_filters dos search hits, e para as aggregations, garante que o facet selecione desconsiderando a própria restrição (mantendo o discovery de vizinhos ativo).
Modal 'Ver todos' implementa Composite Aggregations com Cursor contínuo (after key), embutindo uma camada extra textual (should match_phrase_prefix).
Desafio técnico: Conciliar as agregações super complexas do OpenSearch — necessárias na UX de E-commerce — com as permissões dinâmicas do usuário que residem no banco relacional (ex: esconder questões que o aluno já resolveu localmente).
4. Resiliência do Pipeline de Redis
A proteção dos dados e performance do acesso em lotes segue a topologia:
- Pipeline Batch GET: Requisição massiva das alternativas das listagens num único roundtrip, com tolerância estrita (timeout 3s e
clearTimeout). - Fallback DB: Dados não cacheados caem pro Prisma recuperar as alternativas diretamente do Aurora PostgreSQL via subconsulta
in: missingIds. - Pipeline Batch SET: Retroalimenta o Redis com Hard TTL 24h evitando expansões catastróficas.