Files
1818web-hoduan/docs/search-api.md

262 lines
6.5 KiB
Markdown
Raw Normal View History

# 内容搜索API接口文档
## 概述
本系统提供了统一的内容搜索功能,支持搜索工作流和课程两种类型的内容。所有搜索接口均支持匿名访问,无需登录认证。
## 接口列表
### 1. 基础搜索接口
**GET** `/user/search`
#### 请求参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| keyword | String | 是 | - | 搜索关键词至少2个字符 |
| type | String | 否 | all | 内容类型all/course/workflow |
| category | String | 否 | - | 分类过滤 |
| freeOnly | Boolean | 否 | false | 是否仅显示免费内容 |
| sortBy | String | 否 | relevance | 排序方式relevance/createTime/updateTime/viewCount/likeCount |
| sortOrder | String | 否 | desc | 排序方向asc/desc |
| page | Integer | 否 | 1 | 页码从1开始 |
| size | Integer | 否 | 20 | 每页数量最大100 |
#### 请求示例
```http
GET /user/search?keyword=AI图像处理&type=all&freeOnly=false&page=1&size=20
```
#### 响应示例
```json
{
"code": 200,
"message": "操作成功",
"data": {
"total": 156,
"page": 1,
"size": 20,
"totalPages": 8,
"keyword": "AI图像处理",
"items": [
{
"id": 1,
"type": "course",
"title": "AI图像处理入门课程",
"description": "学习AI图像处理的基础知识和实践技巧",
"coverUrl": "https://example.com/cover1.jpg",
"price": "29.99",
"category": "人工智能",
"isFree": false,
"likeCount": 2300,
"level": 1,
"duration": "15:30",
"viewCount": 12500,
"commentCount": 856,
"vipType": "normal",
"creator": {
"id": "17543607206742139",
"username": "张三",
"avatarUrl": "https://example.com/avatar1.jpg"
},
"createTime": "2024-01-15T10:30:00",
"updateTime": "2024-01-15T10:30:00"
},
{
"id": 2,
"type": "workflow",
"title": "智能图像生成工作流",
"description": "基于AI的智能图像生成工作流支持多种图像风格转换",
"coverUrl": "https://example.com/cover2.jpg",
"price": "19.99",
"category": "人工智能",
"isFree": false,
"likeCount": 1250,
"rating": 5,
"creator": {
"id": "17543607206742140",
"username": "李四",
"avatarUrl": "https://example.com/avatar2.jpg"
},
"createTime": "2024-01-16T14:20:00",
"updateTime": "2024-01-16T14:20:00"
}
]
}
}
```
### 2. 高级搜索接口
**POST** `/user/search`
#### 请求体
```json
{
"keyword": "AI图像处理",
"type": "all",
"category": "人工智能",
"freeOnly": false,
"sortBy": "relevance",
"sortOrder": "desc",
"page": 1,
"size": 20
}
```
#### 响应格式
与GET接口相同。
### 3. 搜索统计接口
**GET** `/user/search/stats`
#### 请求参数
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|--------|------|------|--------|------|
| keyword | String | 是 | - | 搜索关键词 |
| type | String | 否 | all | 内容类型 |
| category | String | 否 | - | 分类过滤 |
| freeOnly | Boolean | 否 | false | 是否仅显示免费内容 |
#### 请求示例
```http
GET /user/search/stats?keyword=AI图像处理&type=all
```
#### 响应示例
```json
{
"code": 200,
"message": "操作成功",
"data": {
"courseCount": 89,
"workflowCount": 67,
"totalCount": 156,
"categoryStats": [
{
"categoryName": "人工智能",
"count": 45
},
{
"categoryName": "图像处理",
"count": 32
},
{
"categoryName": "机器学习",
"count": 28
}
]
}
}
```
## 数据结构说明
### SearchResultItem
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | Long | 内容ID |
| type | String | 内容类型course/workflow |
| title | String | 标题/名称 |
| description | String | 描述 |
| coverUrl | String | 封面图URL |
| price | String | 价格 |
| category | String | 分类 |
| isFree | Boolean | 是否免费 |
| likeCount | Integer | 点赞数 |
| level | Integer | 访问级别(仅课程) |
| duration | String | 课程时长(仅课程) |
| viewCount | Integer | 观看次数(仅课程) |
| commentCount | Integer | 评论数(仅课程) |
| vipType | String | VIP类型仅课程 |
| rating | Integer | 评分(仅工作流) |
| creator | CreatorInfo | 创建者信息 |
| createTime | String | 创建时间 |
| updateTime | String | 更新时间 |
### CreatorInfo
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | String | 创建者ID |
| username | String | 创建者用户名 |
| avatarUrl | String | 创建者头像URL |
### VIP类型说明
| level值 | vipType | 说明 |
|---------|---------|------|
| 0 | free | 免费用户 |
| 1 | normal | 普通用户 |
| 2 | vip | VIP用户 |
| 3+ | svip | 超级VIP用户 |
## 功能特性
### 1. 多类型内容支持
- 支持同时搜索课程和工作流
- 可通过`type`参数过滤特定类型内容
- 返回结果中明确标识内容类型
### 2. 智能搜索
- 支持标题、描述、分类的模糊匹配
- 相关度排序算法优化搜索结果
- 支持多种排序方式
### 3. 高级过滤
- 分类过滤:按内容分类筛选
- 免费内容过滤:仅显示免费内容
- 创建者信息:显示内容创建者详情
### 4. 分页支持
- 灵活的分页参数控制
- 返回完整的分页信息
- 支持大数据量搜索
### 5. 统计信息
- 提供搜索结果统计
- 分类分布统计
- 各类型内容数量统计
## 使用建议
### 1. 搜索优化
- 使用具体的关键词获得更准确的结果
- 结合分类过滤提高搜索精度
- 合理使用排序参数优化用户体验
### 2. 性能考虑
- 建议使用适当的页面大小10-50
- 避免过于宽泛的搜索关键词
- 优先使用GET接口进行基础搜索
### 3. 前端集成
- 实现搜索建议和自动补全
- 提供搜索历史记录
- 支持搜索结果的多种展示方式
## 错误码说明
| 错误码 | 说明 |
|--------|------|
| 400 | 请求参数错误(如关键词过短、类型无效等) |
| 500 | 服务器内部错误 |
## 注意事项
1. 所有搜索接口均支持匿名访问,无需身份认证
2. 搜索关键词最少需要2个字符
3. 搜索结果仅包含已审核通过的公开内容
4. 接口返回的价格字段为字符串格式
5. 创建者信息可能为空(对于已删除的用户账户)