Featured image of post Hybrid Vector Search: Finding Your Content Faster

Hybrid Vector Search: Finding Your Content Faster

Search now combines semantic understanding with traditional keyword matching for instant, relevant results

We’ve rebuilt search from the ground up using hybrid vector search technology. If you’ve been frustrated with slow search results or having to remember exact words, this update should feel like a significant improvement.

The Problem

Our previous search implementation had two major issues that affected daily usage:

Speed: Search queries took 2-3 seconds on average. We were using an LLM to interpret your search intent and generate OpenSearch queries dynamically. While clever, this approach meant every search required an AI roundtrip before even touching the database. For something you do dozens of times per day, those seconds add up quickly.

Keyword Dependency: You had to remember the exact words used in your saved content. Searching for “javascript tutorial” wouldn’t find an item titled “learning JS basics” - even though they’re clearly related. The search couldn’t understand semantic meaning, only exact term matches.

Users reported giving up on search and manually scrolling through lists instead. That defeats the purpose of having search in the first place.

What Changed

We’ve implemented a hybrid search system that combines two approaches:

Vector Similarity Search Your saved items now have semantic embeddings - mathematical representations of their meaning. When you search, we generate an embedding for your query and find items with similar meanings, regardless of exact wording. Searching for “python guide” will now surface items about “learning python” or “python tutorial” because they’re semantically related.

Traditional Keyword Matching We still use classic keyword search (fuzzy matching, field boosting) because it works well for specific terms. If you search for a URL fragment or a specific tag, exact matching is what you want.

The Hybrid Part Both approaches run together in a single query. Results are ranked by a combined score that factors in both semantic similarity and keyword relevance. Items that match both ways rank highest.

Speed Improvement Searches now complete in 50-200ms - roughly 10-15x faster than before. No LLM roundtrip required. The query goes straight to OpenSearch with your search embedding, gets results, and returns.

Technical Notes

The implementation uses OpenSearch’s k-NN plugin for vector similarity and combines it with multi-match queries using script_score. Embeddings are 1536-dimensional vectors stored alongside your metadata.

Search ranking uses cosine similarity for semantic scoring plus a boosted keyword score. Fields like title and summary are weighted higher than tags or URLs.

The system only searches items that have embeddings. Older items are being processed in the background - you might notice more results appearing in searches over the next few days as the migration completes.

Usage

The changes apply automatically. The search interface hasn’t changed - just type what you’re looking for. Try searching with natural descriptions instead of exact keywords:

  • “article about react hooks from last month”
  • “that video explaining docker containers”
  • “github projects related to API tools”

You should notice results appearing faster and matching more intuitively based on meaning rather than exact word matches.


Powered by Listify Smart
Built with Hugo
Theme Stack designed by Jimmy