用戶查詢車票顯示無票時,系統需根據查詢條件(出發地、目的地、出發時間、席位類型等)智能推薦替代方案,提升用戶成單率。
function recommend(query):
candidates = []
// 1. 同車次鄰近日期
candidates += searchNearbyDates(query.trainNo, query.date, ±3)
// 2. 同路線其他車次
candidates += searchSameRoute(query.from, query.to, query.date)
// 3. 周邊車站
nearbyFrom = getNearbyStations(query.from, 50km)
nearbyTo = getNearbyStations(query.to, 50km)
for f in nearbyFrom:
for t in nearbyTo:
candidates += searchTrips(f, t, query.date)
// 4. 中轉方案(限 1 次換乘)
candidates += searchTransfer(query.from, query.to, query.date, maxTransfer=1)
// 5. 過濾無票、換乘時間過短、總耗時過長
candidates = filterValid(candidates)
// 6. 排序:優先級 = 價格相似度 + 時間接近度 + 歷史準點率 + 換乘次數權重
return sortByScore(candidates)[:10]
無票推薦的核心是「多維度擴大搜索空間 + 多因子排序」。工程上以直達鄰近日期為主,異步補充中轉方案,配合候補功能,可顯著提升用戶體驗與成單率。