# 广场作品排序推荐算法说明
## 📊 当前排序算法(简单版)
### 1. 最新排序 (latest)
```sql
ORDER BY pw.create_time DESC
```
- **逻辑**: 按发布时间倒序
- **优点**: 简单直接,新作品优先展示
- **缺点**: 忽略作品质量,优质老作品难以被发现
### 2. 热门排序 (hot)
```sql
ORDER BY pw.like_count DESC, pw.create_time DESC
```
- **逻辑**: 先按点赞数倒序,再按时间倒序
- **优点**: 高质量作品排前面
- **缺点**:
- 老作品积累点赞多,新作品难出头
- 没有时间衰减,不符合"热度"概念
- 只考虑点赞,忽略浏览、评论等互动
---
## 🚀 优化方案:智能推荐算法
### 方案一:时间衰减热度算法(推荐)
#### 热度公式
```
热度分 = (点赞权重 × 点赞数 + 浏览权重 × 浏览数) / (发布时间距今小时数 + 2)^衰减系数
```
**参数设置**:
- 点赞权重: 10
- 浏览权重: 1
- 衰减系数: 1.5
- 时间基数: 2 (避免除零,新作品有初始优势)
**示例计算**:
```
作品A: 100赞, 1000浏览, 发布24小时
热度 = (10×100 + 1×1000) / (24 + 2)^1.5 = 2000 / 132.3 ≈ 15.1
作品B: 50赞, 500浏览, 发布2小时
热度 = (10×50 + 1×500) / (2 + 2)^1.5 = 1000 / 8 = 125
作品B虽然数据少,但因为新鲜度高,热度分更高!
```
#### SQL实现
```sql
SELECT pw.*,
(10 * pw.like_count + 1 * pw.view_count) /
POW(TIMESTAMPDIFF(HOUR, pw.create_time, NOW()) + 2, 1.5) as hot_score
FROM plaza_work pw
WHERE pw.status = 'published' AND pw.audit_status = 'approved'
ORDER BY hot_score DESC
```
### 方案二:威尔逊得分算法(适合评分系统)
如果未来加入评分功能,可使用威尔逊得分:
```
威尔逊下界 = (p + z²/2n - z × √(p(1-p)/n + z²/4n²)) / (1 + z²/n)
其中:
- p = 好评率 (点赞数 / (点赞数 + 踩数))
- n = 总投票数
- z = 置信度系数 (95%置信度时 z=1.96)
```
### 方案三:多维度评分算法
#### 综合评分公式
```
总分 = 质量分 × 40% + 热度分 × 30% + 新鲜度分 × 20% + 互动分 × 10%
```
**各维度计算**:
1. **质量分** (0-100):
```
质量分 = MIN(点赞率 × 100, 100)
点赞率 = 点赞数 / MAX(浏览数, 1)
```
2. **热度分** (0-100):
```
热度分 = MIN((点赞数 × 10 + 浏览数) / 平台平均热度 × 50, 100)
```
3. **新鲜度分** (0-100):
```
新鲜度分 = MAX(100 - 发布小时数 × 2, 0)
```
4. **互动分** (0-100):
```
互动分 = MIN((点赞数 + 评论数 × 3) × 2, 100)
```
---
## 🎯 推荐的实施方案
### 第一阶段:实现时间衰减热度算法
修改 `PlazaWorkMapper.java`:
```java
@Select("")
List