8.6 KiB
8.6 KiB
智能推荐系统文档
一、系统概述
智能推荐系统基于用户行为数据,为用户提供个性化的商品推荐。系统综合分析用户的搜索历史、浏览历史,结合全站热销商品数据,生成智能推荐列表。
二、推荐逻辑架构
┌─────────────────────────────────────────────────────────────┐
│ 智能推荐系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 用户搜索历史 │ │ 用户浏览历史 │ │ 全站热销商品 │ │
│ │ (权重高) │ │ (权重中) │ │ (权重低) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 关键词匹配 │ │ 分类匹配 │ │ 销量排序 │ │
│ │ 相关商品 │ │ 相似商品 │ │ 热门商品 │ │
│ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘ │
│ │ │ │ │
│ └────────────────┼────────────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 去重 & 合并结果 │ │
│ └──────────┬──────────┘ │
│ ▼ │
│ ┌─────────────────────┐ │
│ │ 返回推荐商品列表 │ │
│ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
三、权重分配策略
3.1 数据源权重
| 数据源 | 权重 | 说明 |
|---|---|---|
| 用户搜索历史 | 50% | 用户主动搜索的关键词最能反映购买意向 |
| 用户浏览历史 | 30% | 用户浏览过的商品分类反映兴趣偏好 |
| 热销商品 | 20% | 全站热销商品作为兜底和补充 |
3.2 推荐优先级
优先级 1: 用户搜索历史匹配的商品(最多占推荐列表的50%)
优先级 2: 用户浏览过的分类下的商品(最多占推荐列表的30%)
优先级 3: 全站热销商品(填充剩余位置)
四、核心算法详解
4.1 智能推荐主流程
async getSmartRecommendations(limit: number): Promise<Product[]> {
const products: Product[] = []
const addedIds = new Set<string>() // 用于去重
// 步骤1: 根据用户搜索历史推荐(权重最高)
const searchHistory = await getUserSearchHistory(5)
if (searchHistory.length > 0) {
const keywordProducts = await searchProductsByKeywords(searchHistory, limit)
// 添加到结果列表,去重
}
// 步骤2: 根据用户浏览历史推荐(权重中)
if (products.length < limit) {
const browseCategories = await getUserBrowseCategories(3)
if (browseCategories.length > 0) {
const categoryProducts = await getProductsByCategories(browseCategories, limit - products.length)
// 添加到结果列表,去重
}
}
// 步骤3: 补充热销商品(权重低)
if (products.length < limit) {
const hotProducts = await getHotProducts(limit - products.length + 5)
// 添加到结果列表,去重
}
return products.slice(0, limit)
}
4.2 搜索历史匹配算法
// 根据用户搜索关键词匹配商品
async searchProductsByKeywords(keywords: string[], limit: number): Promise<Product[]> {
// 1. 获取商品数据
// 2. 遍历商品,检查名称和描述是否包含关键词
// 3. 匹配成功的商品加入推荐列表
for (product in products) {
for (keyword in keywords) {
if (product.name.contains(keyword) || product.description.contains(keyword)) {
matched = true
break
}
}
}
}
4.3 浏览历史分类匹配算法
// 根据用户浏览过的商品分类推荐
async getProductsByCategories(categoryIds: string[], limit: number): Promise<Product[]> {
// 1. 获取用户浏览过的商品分类ID列表
// 2. 查询这些分类下的商品
// 3. 按销量排序返回
}
五、热搜词系统
5.1 热搜词计算
async getHotKeywords(limit: number): Promise<string[]> {
// 1. 获取最近100条搜索记录
// 2. 统计每个关键词的出现频率
// 3. 按频率降序排序
// 4. 返回前N个高频关键词
}
5.2 热搜词展示规则
| 排名 | 样式 | 说明 |
|---|---|---|
| 1-3名 | 红色背景 | 热度最高,突出显示 |
| 4-10名 | 灰色背景 | 普通热度 |
六、用户行为记录
6.1 搜索行为记录
// 在用户执行搜索时调用
async recordSearch(keyword: string, resultCount: number): Promise<void> {
// 记录字段:
// - user_id: 用户ID(可选,支持匿名)
// - keyword: 搜索关键词
// - result_count: 搜索结果数量
// - created_at: 搜索时间
}
6.2 浏览行为记录
// 在用户查看商品详情时调用
async recordBrowse(productId: string, duration: number): Promise<void> {
// 记录字段:
// - user_id: 用户ID
// - product_id: 商品ID
// - browse_duration: 浏览时长(秒)
// - created_at/updated_at: 时间戳
}
七、数据表结构
7.1 搜索历史表 (ml_search_history)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 主键 |
| user_id | UUID | 用户ID(可空) |
| keyword | VARCHAR(200) | 搜索关键词 |
| result_count | INTEGER | 搜索结果数量 |
| created_at | TIMESTAMP | 搜索时间 |
7.2 浏览历史表 (ml_browse_history)
| 字段 | 类型 | 说明 |
|---|---|---|
| id | UUID | 主键 |
| user_id | UUID | 用户ID |
| product_id | UUID | 商品ID |
| browse_duration | INTEGER | 浏览时长(秒) |
| created_at | TIMESTAMP | 首次浏览时间 |
| updated_at | TIMESTAMP | 最近浏览时间 |
八、API接口列表
| API | 方法 | 说明 |
|---|---|---|
| getSmartRecommendations | GET | 获取智能推荐商品 |
| getHotKeywords | GET | 获取热搜词列表 |
| getUserSearchHistory | GET | 获取用户搜索历史 |
| getUserBrowseCategories | GET | 获取用户浏览分类 |
| recordSearch | POST | 记录搜索行为 |
| recordBrowse | POST | 记录浏览行为 |
九、性能优化建议
9.1 缓存策略
- 热搜词列表:缓存5分钟,减少数据库查询
- 用户搜索历史:缓存10分钟
- 推荐结果:缓存3分钟
9.2 数据量控制
- 搜索历史:每个用户最多保留100条
- 浏览历史:每个用户最多保留50条
- 热搜词统计:只统计最近30天的数据
十、扩展方向
10.1 短期优化
- 时间衰减因子:近期行为权重更高
- 购买行为加权:已购买商品的相关商品权重提升
- 收藏行为加权:收藏商品的相关商品权重提升
10.2 长期规划
- 协同过滤:基于相似用户的行为推荐
- 商品相似度:基于商品属性计算相似度
- 机器学习:使用推荐算法模型
文档版本:1.0 最后更新:2024年