# 智能推荐系统文档

## 一、系统概述

智能推荐系统基于用户行为数据，为用户提供个性化的商品推荐。系统综合分析用户的搜索历史、浏览历史，结合全站热销商品数据，生成智能推荐列表。

## 二、推荐逻辑架构

```
┌─────────────────────────────────────────────────────────────┐
│                    智能推荐系统                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 用户搜索历史 │  │ 用户浏览历史 │  │ 全站热销商品 │         │
│  │   (权重高)   │  │   (权重中)   │  │   (权重低)   │         │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘         │
│         │                │                │                 │
│         ▼                ▼                ▼                 │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐         │
│  │ 关键词匹配  │  │ 分类匹配    │  │ 销量排序    │         │
│  │ 相关商品    │  │ 相似商品    │  │ 热门商品    │         │
│  └──────┬──────┘  └──────┬──────┘  └──────┬──────┘         │
│         │                │                │                 │
│         └────────────────┼────────────────┘                 │
│                          ▼                                  │
│              ┌─────────────────────┐                       │
│              │   去重 & 合并结果   │                       │
│              └──────────┬──────────┘                       │
│                         ▼                                  │
│              ┌─────────────────────┐                       │
│              │   返回推荐商品列表   │                       │
│              └─────────────────────┘                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘
```

## 三、权重分配策略

### 3.1 数据源权重

| 数据源 | 权重 | 说明 |
|--------|------|------|
| 用户搜索历史 | 50% | 用户主动搜索的关键词最能反映购买意向 |
| 用户浏览历史 | 30% | 用户浏览过的商品分类反映兴趣偏好 |
| 热销商品 | 20% | 全站热销商品作为兜底和补充 |

### 3.2 推荐优先级

```
优先级 1: 用户搜索历史匹配的商品（最多占推荐列表的50%）
优先级 2: 用户浏览过的分类下的商品（最多占推荐列表的30%）
优先级 3: 全站热销商品（填充剩余位置）
```

## 四、核心算法详解

### 4.1 智能推荐主流程

```typescript
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 搜索历史匹配算法

```typescript
// 根据用户搜索关键词匹配商品
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 浏览历史分类匹配算法

```typescript
// 根据用户浏览过的商品分类推荐
async getProductsByCategories(categoryIds: string[], limit: number): Promise<Product[]> {
  // 1. 获取用户浏览过的商品分类ID列表
  // 2. 查询这些分类下的商品
  // 3. 按销量排序返回
}
```

## 五、热搜词系统

### 5.1 热搜词计算

```typescript
async getHotKeywords(limit: number): Promise<string[]> {
  // 1. 获取最近100条搜索记录
  // 2. 统计每个关键词的出现频率
  // 3. 按频率降序排序
  // 4. 返回前N个高频关键词
}
```

### 5.2 热搜词展示规则

| 排名 | 样式 | 说明 |
|------|------|------|
| 1-3名 | 红色背景 | 热度最高，突出显示 |
| 4-10名 | 灰色背景 | 普通热度 |

## 六、用户行为记录

### 6.1 搜索行为记录

```typescript
// 在用户执行搜索时调用
async recordSearch(keyword: string, resultCount: number): Promise<void> {
  // 记录字段：
  // - user_id: 用户ID（可选，支持匿名）
  // - keyword: 搜索关键词
  // - result_count: 搜索结果数量
  // - created_at: 搜索时间
}
```

### 6.2 浏览行为记录

```typescript
// 在用户查看商品详情时调用
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 短期优化

1. **时间衰减因子**：近期行为权重更高
2. **购买行为加权**：已购买商品的相关商品权重提升
3. **收藏行为加权**：收藏商品的相关商品权重提升

### 10.2 长期规划

1. **协同过滤**：基于相似用户的行为推荐
2. **商品相似度**：基于商品属性计算相似度
3. **机器学习**：使用推荐算法模型

---

*文档版本：1.0*
*最后更新：2024年*
