Files
medical-mall/doc_mall/consumer/backup_doc_full/SMART_RECOMMENDATION.md

8.6 KiB
Raw Blame History

智能推荐系统文档

一、系统概述

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

二、推荐逻辑架构

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

三、权重分配策略

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 短期优化

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

10.2 长期规划

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

文档版本1.0 最后更新2024年