Ecommerce ops · Production

Evolution and Scale of Uber Eats' Multilingual Semantic Search Platform

The problem

Uber Eats' lexical search stack could not handle real-world query complexity—synonyms, typos, shorthand, multilingual terms, and context-dependent words—causing missed intent and poor results for a large portion of user searches.

First attempt

Traditional lexical matching was effective only when queries exactly matched document text, but produced bad search results for the broad range of real-world queries Uber Eats receives.

Workflow diagram · grounded in source
1
User types search query
trigger
“a large share of orders start with people typing into the search bar to find stores, dishes, and grocery items”
2
Batch document embedding
ai_action
“the document embeddings are calculated in a batch manner via offline scheduled services”
3
Real-time query embedding
ai_action
“The query embeddings are calculated via an online service in real time”
4
Pre-filter candidate reduction
validation
“locale-aware lexical fields and boolean pre-filters—including hexagon, city_id, doc_type, and fulfillment_types—that run before the ANN search. These pre-filters dramatically shrink the candidate set up front”
5
ANN vector search
ai_action
“Once the ANN search identifies the top-k candidates per vertical”
6
Micro-re-ranking step
ai_action
“we optionally apply a lightweight micro-re-ranking step, using a compact neural network, to further refine results before handing them off to downstream rankers”
7
Biweekly index and model refresh
feedback_loop
“our Delivery semantic search runs a scheduled end-to-end workflow that updates the embedding model and serving index in lockstep on a biweekly cadence”
8
Automated pre-deployment validation
validation
“we gate with automated validations that run before any deployment: they block the flow if inputs are incomplete, if the carried-forward (active) column diverges significantly from the current prod index, or if the newly refreshed column …”
Reported outcome

Uber Eats built a production semantic search system that powers multilingual discovery across restaurants, grocery, and retail, achieving a 34% latency reduction and 17% CPU savings through k-tuning, more than halving latency with scalar quantization while maintaining recall above 0.95, and reducing storage costs by nearly 50% with MRL embeddings.

Reported metrics
Latency reduction from k tuning34%
CPU savings from k tuning17%
Recall with int7 scalar quantizationabove 0.95
Latency reduction from scalar quantization vs fp32more than half
Show all 6 reported metrics
latency reduction from k tuning34%
CPU savings from k tuning17%
recall with int7 scalar quantizationabove 0.95
latency reduction from scalar quantization vs fp32more than half
retrieval quality loss at 256 dims vs full-size embeddings< 0.3%
storage cost reduction with MRLnearly 50%
Reported stack
QwenPyTorchHugging Face TransformersRayDeepSpeedHNSWfeature store
Source
https://www.uber.com/en-GB/blog/evolution-and-scale-of-ubers-delivery-search-platform/?uclick_id=0a73d271-32e7-4b77-9697-a587a4c8d9fe
Read source ↗

Frequently asked questions

What did this team achieve with this AI workflow?

Uber Eats built a production semantic search system that powers multilingual discovery across restaurants, grocery, and retail, achieving a 34% latency reduction and 17% CPU savings through k-tuning, more than halving…

What tools did this team use?

Qwen, PyTorch, Hugging Face Transformers, Ray, DeepSpeed, HNSW, feature store.

What results were reported?

Latency reduction from k tuning: 34%; CPU savings from k tuning: 17%; Recall with int7 scalar quantization: above 0.95; Latency reduction from scalar quantization vs fp32: more than half (source-reported, not independently verified).

What failed first in this deployment?

Traditional lexical matching was effective only when queries exactly matched document text, but produced bad search results for the broad range of real-world queries Uber Eats receives.

How is this ecommerce ops AI workflow structured?

User types search query → Batch document embedding → Real-time query embedding → Pre-filter candidate reduction → ANN vector search → Micro-re-ranking step → Biweekly index and model refresh → Automated pre-deployment validation.