Search that finishes the user's sentence
DTC fashion · UK
TL;DR
A DTC fashion brand was running keyword search with 31% null-result sessions and a 1.8% session-to-cart conversion. We rebuilt search as a hybrid BM25 + dense-vector retrieval pipeline with a thin LLM rewrite step, fronted by a conversational UI that suggests refinements when intent is ambiguous. Null results fell to 4%. Add-to-cart on search sessions rose 18%. Average time-to-first-product-view dropped 41%. No model fine-tuning; the gains came from retrieval honesty and a tighter index.
+18% add-to-cart on search sessions; null results 31% → 4%.
01
The problem
31% of search sessions returned nothing. The product team had been told this meant they needed an LLM. What they needed first was a coherent index — colours and fabrics inconsistent across product types, half the synonyms missing, plurals treated as separate tokens. The LLM was real, but it came at the end.
02
The approach
Index hygiene first: synonym maps, fabric and colour ontologies, plural-folding. Then hybrid retrieval — BM25 + dense vectors from a generic embedding model — with no fine-tuning. A small LLM rewrite step turned natural-language queries into bullet-style refinement chips when results were thin. We shipped each component dark behind a feature flag and measured each before going live.
Screens
What changed
Add-to-cart on search
+18%Null-result sessions
4%from 31%
Time to first product view
-41%Stack
- Next.js 15
- Postgres + pgvector
- Voyage AI
- Cloudflare Workers
Team
- Andrea Ventura
- Fabio Cerami
Next case