Semantic search

Search that matches on meaning instead of exact words, so 'how do I cancel' finds the page titled 'ending your subscription'.

search that understands intentfinds it even with different wordssearch by meaningvector searchsimilarity searchsemantic serachfuzzy meaning searchsearch that works when i forget the exact wording

See it

Live demo coming soon

What it is

Keyword search matches characters. Semantic search matches meaning: every document is converted to an embedding, a long list of numbers positioning it in a space where related ideas sit close together. Your query gets the same treatment, and the engine returns whatever is nearest, usually by cosine similarity. That is why 'how do I cancel' surfaces a page titled 'ending your subscription' with zero shared words.

Reach for it when users describe rather than name things: help centers, support tickets, note apps, product catalogs, and the retrieval step of any RAG pipeline. Quality is decided upstream of the fancy part. Chunk size, what metadata you attach, and which embedding model you picked matter more than the vector database you chose.

The honest weakness: semantic search is bad at exactly the queries keyword search nails. Product SKUs, error codes, surnames, and version numbers have no interesting meaning to embed, so 'ERR_2043' happily returns five thematically similar errors and not that one. It also always returns something, ranked confidently, even when nothing relevant exists. Production systems almost always run hybrid search (keyword plus vector) with a reranker on top, and cut results below a similarity floor.

Ask AI for it

Build semantic search over this content. Chunk the documents into roughly 300 to 500 token passages with slight overlap, keep title and source metadata on each chunk, embed them with a current embedding model, and store the vectors in pgvector (or the project's existing vector store). At query time, embed the user's query, retrieve the top 20 by cosine similarity, drop anything under a similarity threshold, and return the top 5 with source links and the matching snippet. Combine it with keyword search over the same corpus so exact identifiers like error codes and SKUs still work, and make re-embedding a single idempotent command to run when content changes.

You might have meant

embeddingvector databasehybrid searchrerankingrag