Your users are searching. Your search is just matching keywords.
A client had a help center built in Next.js. Hundreds of articles. Users typed real questions like "how do I get a refund" and got zero results, because no article contained those exact words. Support tickets kept growing.
The wrong approach, and the most common one, is to keep patching keyword search. Add synonyms. Add tags. Add fuzzy matching. Every patch helps a few queries and breaks a few others. You are polishing a system that fundamentally cannot understand meaning.
The fix took me an afternoon: semantic search with embeddings.
The idea in one paragraph
An embedding turns text into a list of numbers that captures meaning. Two pieces of text that mean similar things get similar numbers, even when they share almost no words. So instead of asking the database "which articles contain these words", you ask "which articles mean something close to this question".…