Back to the blog
7 min readPostgreSQLSearchLingRise
Multilingual semantic search with pgvector
How 9 languages share one vector index without wrecking relevance.
The problem
LingRise indexes podcast transcripts in 9 languages. A French speaker learning Spanish must be able to search in French and land on a relevant Spanish passage.
The approach
- A genuinely multilingual embedding model, not an English model plus translation.
- A single
ivfflatindex over avector(1536)column in PostgreSQL, with partial pre-filtering onlang. - A hybrid score:
0.7 * cosine + 0.3 * BM25, because embeddings handle proper nouns poorly.
The counter-intuitive part
Filtering by language before vector search hurt recall: the best matches often came from another language. The fix was to search wide, then re-weight in the application layer.