Search Infrastructure for Video Catalogs: Faceted Indexing, Typo Tolerance, and Instant Results
Inside the search layer of large video libraries — inverted index design, fuzzy matching for title queries, facet filtering, and delivering sub-50ms search at catalog scale.
Video catalogs die by their search box. When a library holds hundreds of thousands of titles, users who can’t find what they want in one query simply leave — and the gap between a 40ms search response and a 400ms one shows up directly in session depth metrics.
What a Video Search Index Actually Contains
Unlike document search, video catalog queries are shallow but broad: users type partial titles, performer names, categories, and rough descriptions, usually on mobile keyboards with autocorrect fighting them. The index therefore needs:
- Title fields — n-gram tokenized for instant prefix matching (
"night"should hit while typing"nigh") - Metadata facets — duration, resolution, upload date, category tags, language
- Popularity signals — view velocity and rating folded into ranking so relevant results aren’t buried under old noise
| Engine | Latency @ 1M Docs | Typo Tolerance | Ops Complexity |
|---|---|---|---|
| Elasticsearch/OpenSearch | 20–60 ms | Fuzzy + analyzer tuning | High (JVM cluster) |
| Typesense | 10–30 ms | Built-in, per-field | Low (single binary) |
| Meilisearch | 15–40 ms | Built-in | Low |
| Postgres FTS | 50–200 ms | Manual (pg_trgm) | Lowest — already deployed |
Typo Tolerance Is Non-Negotiable
Mobile typo rates on search queries run 8–15%. Levenshtein-distance fuzzy matching with max_fuzziness=2 recovers most of them — "streeming" still finds "streaming" — but unbounded fuzziness pollutes results. The production sweet spot: fuzziness on title tokens only, exact matching on facet filters.
{
"searches": [{
"collection": "videos",
"q": "streeming",
"query_by": "title,tags",
"num_typos": 2,
"sort_by": "_text_match:desc,view_velocity:desc",
"facet_by": "category,resolution,duration_bucket"
}]
}
Instant Search UX Pattern
The perceived speed comes from architecture, not raw latency:
- Debounced keystroke queries at 120–150ms intervals against a lightweight edge endpoint — never let queries round-trip a distant origin.
- Facet counts computed once per query and cached; rendering category counts alongside results costs almost nothing in inverted-index engines.
- Prefetch top result — when the query settles, pre-warm the top result’s detail page so navigation feels instant.
“Search is the highest-intent interaction on any catalog. Every 100ms of query latency measurably reduces the probability the user issues a second query at all.”
Ranking formula details, index refresh cadence, and edge cache patterns are documented in our video catalog search architecture notes.