Utilisez un moteur de recherche dédié — Elasticsearch/OpenSearch bâti sur un index inversé — alimenté depuis votre DB source via CDC, et shardez l'index pour l'échelle. Votre base de données primaire (Postgres/MySQL) ne peut pas faire de recherche textuelle classée par pertinence sur des centaines de millions de lignes ; un LIKE '%term%' scanne chaque ligne. Un moteur de recherche inverse le problème.
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
