Usa un motore di ricerca dedicato — Elasticsearch/OpenSearch costruito su un inverted index — alimentato dal tuo DB sorgente via CDC, e fai sharding dell'index per la scala. Il tuo database primario (Postgres/MySQL) non può fare ricerca testuale ordinata per rilevanza su centinaia di milioni di righe; un LIKE '%term%' fa lo scan di ogni riga. Un motore di ricerca inverte il 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
