跳转至

搜索(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 + KmsSecurityFilterKmsMvcConfig 注册全局 Servlet 过滤器 KmsSecurityFilter(URL 模式 /*,context-path 为 / 时为 /kms/*)。本控制器路径 /api/kms/search/**/kms/search/** 均不在 KmsSecurityFilter.isExcludeURI 的豁免名单内(豁免仅覆盖 /login.*/admin/domain.*/tray/service/authtimeservice/OfficeServer.*outsideshare/.*/preview、静态资源后缀、actuator/health 等)。过滤器调用 Security.getUserIdFromToken(request),取不到用户则返回 HTTP 401因此所有端点均需 accessToken,可通过以下任一方式传递(据 Security.getUserIdFromToken):query 参数 accessToken、query 参数 access_token(移动端)、请求头 accessToken、Cookie accessToken、请求头 Authorization: Bearer <token>。完整鉴权机制见 index.md「鉴权说明」。
  • 执行用户:控制器内 getUser()(继承自 AbstractBaseController)调用 Security.getUserIdFromToken(request) 还原当前用户 id,再经 Feign(UserAPI.getUserById)装载 KmsUseruserCode 参数
  • 响应结构:统一 Resource(见 ../index.md「统一响应结构」),字段为 errcode/errmsg/data/errors。KMS 的 ResourceAbstractBaseController 内部类,其构造器对 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)。
  • 网盘类型常量(据源码 DiskTYPE_DEPARTMENT(部门网盘)、TYPE_TEAM(团队网盘)、TYPE_PERSON(个人网盘)。多数榜单默认检索部门 + 团队网盘;「我的最近」系列额外纳入个人网盘。

1. 文件搜索列表

按关键词进行向量语义检索(与 RagService 向量检索逻辑一致,不经 Lucene 全文索引)。searchwordkeyword 至少其一非空,否则抛 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

请求示例

GET /api/kms/search/files?searchword=季度报告&pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 Resource(见 ../index.md「统一响应结构」)。 dataDataPackage<SearchFile>(由 dataBuilder.buildSearchFileReturnData 构造,含当前页数据与分页信息,并附带当前用户视角的权限/收藏标记)。

失败示例(参数有误)

{ "errcode": 400, "errmsg": "searchword 与 keyword 至少填写一项", "data": null, "errors": null }


2. 最新浏览文件列表

分页查询当前用户企业域下、按最新浏览时间倒序的文件榜单(部门网盘 + 团队网盘)。

  • 接口类型:REST 资源
  • 请求方式GET
  • 请求路径/search/files/lastest_view(完整:{kms-context}/api/kms/search/files/lastest_view
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms搜索模块

请求参数

参数名 位置 类型 必填 说明
pageNo query int 页码
linesPerPage query int 每页条数

请求示例

GET /api/kms/search/files/lastest_view?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/lastest_upload?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/myLastest_upload?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/myRecent_edit?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/myRecent_preview?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/hot_view?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/lastest_share?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/lastest_search?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<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 每页条数

请求示例

GET /api/kms/search/files/myLastest_search?pageNo=1&linesPerPage=20&accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 ResourcedataDataPackage<Searchword>(当前用户的搜索词记录分页数据)。


11. 删除搜索记录

按搜索记录 Id 删除单条搜索词记录。

  • 接口类型:REST 资源
  • 请求方式DELETE
  • 请求路径/search/{id}(完整:{kms-context}/api/kms/search/{id}
  • 鉴权:是(需 accessToken,据源码)
  • Tag:kms搜索模块

请求参数

参数名 位置 类型 必填 说明
id path string 搜索记录Id

请求示例

DELETE /api/kms/search/__SEARCHID__?accessToken=__TOKEN__ HTTP/1.1

响应

结构:统一 Resourcedatanull(操作完成后返回 success("ok", null))。