# 内容搜索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. 创建者信息可能为空（对于已删除的用户账户）
