搜索(SearchController)¶
提供 KMS 知识管理模块的文件检索与「最新/最热」榜单能力:向量语义检索(与 RagService 同源逻辑,不走 Lucene 全文索引)、最新浏览/上传/分享/搜索榜单、最热浏览榜单、当前用户最近的上传/编辑/预览/搜索榜单,以及删除搜索记录。所有端点均返回 JSON 资源。
- 接口类型:REST 资源(
@RestController,类级与所有方法级produces = MediaType.APPLICATION_JSON_VALUE) - 基址:
${myapps.context-path.kms:}/api/kms与${myapps.context-path.kms:}/kms(类级@RequestMapping同时声明两个前缀,同一端点可经任一前缀访问;下文示例统一采用/api/kms) - Tag:kms搜索模块
公共说明¶
- 鉴权(据源码
KmsMvcConfig+KmsSecurityFilter):KmsMvcConfig注册全局 Servlet 过滤器KmsSecurityFilter(URL 模式/*,context-path 为/时为/kms/*)。本控制器路径/api/kms/search/**、/kms/search/**均不在KmsSecurityFilter.isExcludeURI的豁免名单内(豁免仅覆盖/login.*、/admin、/domain.*、/tray/service、/authtime、service/OfficeServer、.*outsideshare/.*/preview、静态资源后缀、actuator/health等)。过滤器调用Security.getUserIdFromToken(request),取不到用户则返回 HTTP401。因此所有端点均需 accessToken,可通过以下任一方式传递(据Security.getUserIdFromToken):query 参数accessToken、query 参数access_token(移动端)、请求头accessToken、CookieaccessToken、请求头Authorization: Bearer <token>。完整鉴权机制见 index.md「鉴权说明」。 - 执行用户:控制器内
getUser()(继承自AbstractBaseController)调用Security.getUserIdFromToken(request)还原当前用户 id,再经 Feign(UserAPI.getUserById)装载KmsUser。无userCode参数。 - 响应结构:统一
Resource(见 ../index.md「统一响应结构」),字段为errcode/errmsg/data/errors。KMS 的Resource为AbstractBaseController内部类,其构造器对data执行ESAPI.encode(data)做 XSS 编码,故data中的 HTML 特殊字符会被转义。 - HTTP 状态码与错误码(据源码
AbstractBaseController全局异常处理):成功默认 HTTP 200;InvalidRequestException→ HTTP 400 / errcode=400;UnauthorizedException→ HTTP 403 / errcode=403;ForbiddenException→ HTTP 403 / errcode=403;ResourceNotFoundException→ HTTP 404 / errcode=404;其他Exception→ HTTP 500 / errcode=500。 @RequestParam默认必填:未标required=false且无defaultValue的 query 参数按 Spring 约定为必填。- 路径变量:
id(搜索记录 Id)为 KMS 内部主键(明文 id)。 - 网盘类型常量(据源码
Disk):TYPE_DEPARTMENT(部门网盘)、TYPE_TEAM(团队网盘)、TYPE_PERSON(个人网盘)。多数榜单默认检索部门 + 团队网盘;「我的最近」系列额外纳入个人网盘。
1. 文件搜索列表¶
按关键词进行向量语义检索(与 RagService 向量检索逻辑一致,不经 Lucene 全文索引)。searchword 与 keyword 至少其一非空,否则抛 InvalidRequestException(HTTP 400)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files(完整:{kms-context}/api/kms/search/files) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| searchword | query | string | 否 | 语义检索关键词(trim 后判断非空;与 keyword 至少填一项) |
| keyword | query | string | 否 | 关键词(trim 后判断非空;与 searchword 至少填一项) |
| selectTitle | query | boolean | 否 | 是否检索标题,默认 true |
| selectContent | query | boolean | 否 | 是否检索正文,默认 true |
| creator | query | string | 否 | 创建者名称(单值) |
| creatorIds | query | array(string) | 否 | 创建者 Id 列表 |
| fileTypes | query | array(string) | 否 | 文件类型过滤列表 |
| categoryIds | query | array(string) | 否 | 标签(分类)Id 列表 |
| beginTime | query | string | 否 | 起始时间戳(毫秒,字符串型) |
| endTime | query | string | 否 | 截止时间戳(毫秒,字符串型;服务端会将其延展到当天 23:59:59.999) |
| scope | query | array(int) | 否 | 网盘类型范围;缺省时按 [TYPE_DEPARTMENT, TYPE_TEAM] 检索 |
| pageNo | query | int | 否 | 页码,默认 1;<1 抛 400 |
| linesPerPage | query | int | 否 | 每页条数,默认 10;须在 1~100 之间,否则抛 400 |
请求示例¶
响应¶
结构:统一 Resource(见 ../index.md「统一响应结构」)。
data:DataPackage<SearchFile>(由 dataBuilder.buildSearchFileReturnData 构造,含当前页数据与分页信息,并附带当前用户视角的权限/收藏标记)。
失败示例(参数有误):
2. 最新浏览文件列表¶
分页查询当前用户企业域下、按最新浏览时间倒序的文件榜单(部门网盘 + 团队网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/lastest_view(完整:{kms-context}/api/kms/search/files/lastest_view) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(由 dataBuilder.buildFileEntityReturnData 构造,数据类型标记 DATA_TYPE_COLLECTED)。
3. 最新上传文件列表¶
分页查询当前用户企业域下、按最新上传时间倒序的文件榜单(部门网盘 + 团队网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/lastest_upload(完整:{kms-context}/api/kms/search/files/lastest_upload) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(由 dataBuilder.buildFileEntityReturnData 构造,数据类型标记 DATA_TYPE_COLLECTED;服务层未限定创建者,返回企业域全量)。
4. 用户最近上传文件列表¶
分页查询**当前用户**最近上传的文件榜单(部门网盘 + 团队网盘 + 个人网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/myLastest_upload(完整:{kms-context}/api/kms/search/files/myLastest_upload) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(直接返回服务层结果,未经 dataBuilder 包装)。
5. 用户最近编辑的 word 文档列表¶
分页查询**当前用户**最近编辑的 word 文档榜单(部门网盘 + 团队网盘 + 个人网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/myRecent_edit(完整:{kms-context}/api/kms/search/files/myRecent_edit) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(直接返回服务层结果)。
6. 用户最近预览文档列表¶
分页查询**当前用户**最近预览的文件榜单(部门网盘 + 团队网盘 + 个人网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/myRecent_preview(完整:{kms-context}/api/kms/search/files/myRecent_preview) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(直接返回服务层结果)。
7. 最热浏览次数文件列表¶
分页查询当前用户企业域下、按浏览次数倒序的「最热」文件榜单(部门网盘 + 团队网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/hot_view(完整:{kms-context}/api/kms/search/files/hot_view) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(由 dataBuilder.buildFileEntityReturnData 构造,数据类型标记 DATA_TYPE_VIEWS)。
8. 最新分享文件列表¶
分页查询当前用户企业域下、按最新分享时间倒序的文件榜单(部门网盘 + 团队网盘)。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/lastest_share(完整:{kms-context}/api/kms/search/files/lastest_share) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<FileEntity>(由 dataBuilder.buildFileEntityReturnData 构造,数据类型标记 DATA_TYPE_COLLECTED)。
9. 最新搜索文件列表¶
分页查询当前用户企业域下、按最新搜索时间倒序的「搜索词记录」榜单(不区分用户,全企业域)。返回的是搜索词记录列表而非文件列表。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/lastest_search(完整:{kms-context}/api/kms/search/files/lastest_search) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<Searchword>(搜索词记录分页数据;服务层以 userId=null 调用,返回企业域全量记录)。
10. 用户最近搜索文件列表¶
分页查询**当前用户**最近的「搜索词记录」榜单。
- 接口类型:REST 资源
- 请求方式:
GET - 请求路径:
/search/files/myLastest_search(完整:{kms-context}/api/kms/search/files/myLastest_search) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| pageNo | query | int | 是 | 页码 |
| linesPerPage | query | int | 是 | 每页条数 |
请求示例¶
响应¶
结构:统一 Resource。
data:DataPackage<Searchword>(当前用户的搜索词记录分页数据)。
11. 删除搜索记录¶
按搜索记录 Id 删除单条搜索词记录。
- 接口类型:REST 资源
- 请求方式:
DELETE - 请求路径:
/search/{id}(完整:{kms-context}/api/kms/search/{id}) - 鉴权:是(需 accessToken,据源码)
- Tag:kms搜索模块
请求参数¶
| 参数名 | 位置 | 类型 | 必填 | 说明 |
|---|---|---|---|---|
| id | path | string | 是 | 搜索记录Id |
请求示例¶
响应¶
结构:统一 Resource。
data:null(操作完成后返回 success("ok", null))。