Pular para o conteúdo

apps/data-patterns/search-index

102 · Dados & Persistência · ≈ 6 min de estudo

Search Index

Mantém uma cópia dos dados modelada para consulta num motor de busca: texto analisado para busca por prefixo e sem acento, keyword para filtro, agregação e ordenação. O banco transacional segue como fonte da verdade; o índice é reconstruível e responde as buscas que um LIKE '%merc%' resolveria com varredura. O preço é consistência eventual e mais um cluster para operar.

passos
6
arquivos
7
teste
1
tecnologias
5
Infraestrutura realTypeScriptBunElysiaElasticsearchDocker
Baixar cartão

Cenário

Banco digital com extrato pesquisável: o cliente digita "sao" e precisa achar "Drogaria São Paulo", filtra PIX entre R$ 1.000 e R$ 2.000, vê contadores por tipo de transação e rola o extrato sem a página 500 custar mais que a primeira.

Planta

Fluxo
6/6
Transações do livro- fonte da verdadeBulk com refreshdesligado e _id fixotransactions_v1transactions_v2 - novo mappingalias transactionsAPI de busca - ElysiaJSApp do cliente_reindextroca atômicafiltros simplesbool must e filter,aggs, search_after
6

6 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Índice invertido para busca textual.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    Mapping explícito com dynamic: strict: campo não declarado falha a escrita em vez de inflar o mapping

  2. 02

    merchant é indexado com edge n-gram, lowercase e asciifolding, e buscado com o analyzer standard; .raw guarda o valor exato

  3. 03

    A carga usa Bulk com refresh_interval: -1, _id fixo (recarga idempotente) e confere os documentos recusados

  4. 04

    A API monta bool: o texto em must, tipo e faixa de valor em filter (sem score, cacheado); os contadores por tipo vêm na mesma resposta

  5. 05

    Paginação por search_after com desempate único por id

  6. 06

    Mapping novo = índice novo preenchido por _reindex e troca atômica do alias; a aplicação só conhece o alias

Trade-offs

O que se ganha, o que se paga

3 vantagenscada ganho tem um preço3 custos

Vantagens

  • Busca por prefixo e sem acento em milissegundos

  • Filtros cacheados e agregações sobre doc_values

  • Mapping evolui sem downtime pelo alias

Custos

  • Cópia eventual: segundos de atraso sobre o banco

  • Mais um cluster para operar e proteger

  • Tipo de campo existente só muda com reindex

apps/data-patterns/search-index

7 arquivos

./

  • docker.shinfraElasticsearch single-node

src/

  • index_transaction.tsSettings, mapping strict, carga Bulk e promoção por reindex + alias
  • api_search.tsBusca com filtros, facets e cursor
  • seed_transaction.tsTransações determinísticas para indexar
  • config_search.tsVariáveis de ambiente validadas no boot
  • demo.tsdemoCarga, mapping strict, prefixo, filtros, facets e páginas
  • api_search.test.tstesteMapping, analyzer, limites do filtro, facets, cursor e troca de alias contra Elasticsearch real

Executar · com Docker

  1. ./docker.sh up# sobe Elasticsearch
  2. bun install# dependências
  3. bun run demo# roda o cenário
  4. bun run test# integração contra o serviço real

API contínua: bun run api — GET /transactions/search?merchant=sao&type=pix&minAmount=1000&maxAmount=2000.

Requisitos
BunDocker
Sobe junto
Elasticsearch

Por que se relacionam

Teste rápido

Qual padrão vem antes de Search Index?

Próximo projeto · Resiliência & Tolerância a FalhasCircuit Breaker
Esc

↑ ↓ navegarEnter abrir191 resultados