The problem
Keyword search fails exactly where intent gets specific.
Search fails on intent
A query like "earbuds for running that don't fall out" returns nothing useful from keyword matching alone — and zero-result sessions convert at a fraction of the rate of successful ones.
Recommendations are static
"Customers also bought" computed overnight means a shopper who has spent ten minutes browsing one category still sees yesterday's homepage.
Pre-purchase questions go unanswered
Compatibility, comparisons, and use-case fit — the answers exist across spec sheets, manuals, and reviews, but no single surface has them, so support fields the same repeat questions at scale.
Returns trace back to discovery, not defects
A meaningful share of returns are "this doesn't do what I expected" — a discovery failure dressed up as a product complaint.
The high-level solution
Three capabilities behind one assistant.
Prices, stock, and offers are never generated. They're fetched live by tool call and rendered as structured product data. A model that hallucinates a discount creates a legal problem, not a UX problem.
Semantic + multimodal discovery
Natural-language search over a hybrid index — dense vectors for meaning, keyword matching for exact model numbers — fused into one ranked result. Photo search finds visual equivalents the same way.
Conversational assistant
Grounded in a knowledge base built from specs, manuals, FAQs, and reviews. Answers comparisons and compatibility with citations, and can call tools — check stock, apply an offer, start a return.
Real-time personalization
Session behavior streams into a live profile within seconds, so the homepage and recommendations reflect what a shopper is doing right now, not last night's batch job.
Architecture
Three paths, one shared context.
Query path
Shopper query → intent & filter extraction → hybrid search (vector + keyword) → re-ranked results. Falls back to keyword-only search if the intent-extraction call fails or is slow — search never goes down because a model call did.
Assistant path
Conversation → knowledge base retrieval → grounded response + tool calls → live product data. Every factual product claim carries a citation. Ungrounded turns are regenerated once, then handed off to support.
Personalization path
Behavioral events → streaming aggregation → session profile → real-time recommendations. The assistant reads the session profile; the recommender reads what the assistant was just asked. One shared context, not two systems that don't talk.
Pipeline
How it got built.
Foundation
Search infrastructure, event streaming, and identity — the plumbing every other stage sits on.
Catalog pipeline
Product indexing, embeddings, and a content corpus built from specs, manuals, FAQs, and reviews.
Search evaluation set
A curated set of real queries with human relevance judgements, built before any tuning starts — otherwise "search feels better" is the only available metric.
Hybrid search
Vector and keyword fusion, evaluated against the golden set, live before any assistant logic is added.
Knowledge base & assistant
Grounded retrieval, tool calls for stock/price/orders, guardrails, and streamed responses.
Behavioral streaming
Session feature computation in real time from view, dwell, and cart events.
Personalization
Recommendation model training on historical interactions, plus real-time re-ranking from the live session profile.
Merchandiser reporting
Visibility into zero-result queries, catalogue gaps the assistant surfaces, and assistant deflection rate.
Outcomes
What moved.
Figures are illustrative engineering targets for this solution pattern, based on comparable production systems — not a guaranteed result for any specific deployment.
Zero-result search rate
Before: ~34% → Target: <8%
Search-to-cart conversion
Before: ~4.1% → Target: 6.0–7.0%
Assistant containment (no human handoff)
Before: n/a → Target: 65–75%
Pre-sales support volume
Before: baseline → Target: ~55–65% reduction
Return rate ("not as expected")
Before: ~6.2% → Target: 4.0–4.5%
Components
This engagement ran AWS-native, matched to the client's existing cloud estate — the same pattern deploys equally well on Azure or GCP.
Where the platform fits
Every pattern here has an action boundary — a block, an approval, a reply. That is exactly where Nikash's gate sits: claims checked deterministically before the action, and real outcomes fed back afterwards.
See the platform →