Use um search engine dedicado — Elasticsearch/OpenSearch construído sobre um índice invertido — alimentado a partir do seu DB de origem via CDC, e faça sharding do índice para escalar. Seu banco de dados primário (Postgres/MySQL) não consegue fazer busca de texto rankeada por relevância sobre centenas de milhões de linhas; um LIKE '%term%' escaneia toda linha. Um search engine inverte o problema.
Source DB ─▶ CDC (Debezium) ─▶ Kafka ─▶ Indexer ─▶ Elasticsearch/OpenSearch
(Postgres) (change stream) ├─ Shard 0 (inverted index) + replicas
├─ Shard 1
Query ─▶ Coordinator ─▶ scatter to shards ─▶ gather ─┴─ Shard N ── ranked by BM25
