Design and Implementation of Ele.me's Fast‑Iterating Online Recommendation System
This article details how Ele.me built a rapidly iterating recommendation system, covering model ranking architectures (single, linear, multi), online feature computation pipelines, feature management, and shuffling logic to balance algorithmic relevance with user perception, providing practical insights for large‑scale personalized services.
With the rise of mobile internet and fragmented user habits, Ele.me needed a recommendation system that could quickly surface relevant products to millions of daily active users. The presentation outlines the end‑to‑end design from product perspective, including model ranking, feature engineering, log processing, evaluation, and deeper scenario selection and intent recognition.
Model Ranking
The system builds a QueryInfo for each request, gathers UserInfo , ShopInfo , FoodInfo , and ABTest configuration, then invokes a Ranker . The ranking flow consists of three steps: initializing the ranker and its scorers, aggregating required features via InstanceBuilder , and scoring entities before sorting.
Three ranking modes are supported:
single : a single scorer performs ranking.
linear : multiple scorers are weighted and summed.
multi : multiple rounds of scoring, each applied to the top‑N results of the previous round.
Configuration examples for each mode are shown in the original diagrams.
Feature Computation
Online feature calculation must satisfy low latency, high reusability, and strong extensibility. The architecture includes a FeatureManager for managing basic, real‑time, custom, and composite features, and an InstanceBuilder that deduplicates feature lists, resolves dependencies, and computes feature values for each entity.
Feature classes follow a defined interface with methods such as init() , initOther(QueryInfo) , and evaluate(QueryInfo, EntityInfo, StringBuilder) . Custom features inherit from BaseFeature or CompositeFeature and are registered in the FeatureManager .
Shuffling Logic
To avoid over‑concentration of similar items, the system applies several shuffling rules after model scoring:
Category shuffling limits consecutive restaurants of the same category.
Food‑count shuffling demotes restaurants that present fewer than three food items.
Name shuffling spreads restaurants with similar names (e.g., chain stores) by enforcing a minimum distance between identical flags.
These shuffles are applied serially, with later rules having higher priority. Configuration is managed through the Huskar system, illustrated by a JSON snippet:
[
{"name": "recfoods", "topnum": 15, "foodcnt": 3},
{"name": "category", "topnum": 15, "shopcnt": 2},
{"name": "shopflag", "topnum": 20, "span": 3, "exclude": "XXX"},
{"name": "recfoods", "topnum": 15, "foodcnt": 3},
{"name": "dinner", "topnum": 5, "interval": ["10:30~12:30", "16:30~18:30"]},
{"name": "mixture", "topnum": 12, "include": "XXX"}
]Conclusion
The talk demonstrates how a fast‑iterating recommendation system can be built for a rapidly growing internet business, integrating model ranking, feature pipelines, and rule‑based shuffling to deliver both algorithmic performance and user‑centric relevance.
Ctrip Technology
Official Ctrip Technology account, sharing and discussing growth.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.