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 ivfflat index over a vector(1536) column in PostgreSQL, with partial pre-filtering on lang.
  • 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.