知识库系统设计

1 需求描述

1.1 管理员

管理员上传文章,在表单中填入标题作者内容附件,并选择标签,文章的内容和附件必需至少有一项不为空,同时上传页面提供标签的增删改查。

1.2 用户

用户目前只提供搜索知识库功能,可以搜索标题、内容、作者、附件的名字、(支持搜索附件内容后期再实现),可以选择标签进行限定搜索。

2 数据库设计

2.1 表设计

2.1.1 文章表(article)

字段名 数据类型 是否必须 备注
ID INT(21) 表的唯一标识符
CREATED_DATE DATETIME 创建时间
LAST_MODIFIED_DATE DATETIME 最后一次更新时间
title VARCHAR(255) 标题
author VARCHAR(100) 作者
content_id INT(21) 内容ID
file_id VARCHAR(255) 附件ID
tag_id INT(21) 标签ID
CREATE_BY VARCHAR(255) 上传的管理员名字

2.1.2 内容表(content)

字段名 数据类型 是否必须 备注
ID INT(21) 内容表唯一标识符
CREATED_DATE DATETIME 创建时间
LAST_MODIFIED_DATE DATETIME 最后一次更新时间
content TEXT 详细内容

2.1.3 标签表(tag)

字段名 数据类型 是否必须 备注
ID INT(21) 标签表唯一标识符
CREATED_DATE DATETIME 创建时间
LAST_MODIFIED_DATE DATETIME 最后一次更新时间
tag_name VARCHAR(50) 标签名

2.1.4 文件信息表(files)

字段名 数据类型 是否必须 备注
ID INT(21) 标签表唯一标识符
CREATED_DATE DATETIME 创建时间
LAST_MODIFIED_DATE DATETIME 最后一次更新时间
file_name VARCHAR(255) 原始文件名
file_path VARCHAR(255) 文件在服务器或云存储中的路径
file_size BIGINT 文件大小,以字节为单位
file_type VARCHAR(50) 文件的 MIME 类型

2.1.5 管理员表(sys_manager)

字段名 数据类型 是否必须 备注
ID INT(21) 管理员表唯一标识符
CREATED_DATE DATETIME 创建时间
LAST_MODIFIED_DATE DATETIME 最后一次更新时间
manager_name VARCHAR(255) 管理员名字
user_name VARCHAR(255) 管理员登录账号
password VARCHAR(255) 管理员登录密码

3 接口设计

3.1 管理员接口

3.1.1 上传文章

上传文章到知识库。

  • URL

    /api/upload/submitArticle

  • Method

    POST

  • 请求体参数

    参数名 类型 描述
    title String 文章标题
    author String 文章作者
    contentId INT 文章内容 ID
    fileId INT 文章附件ID
    tags Array 文章标签ID列表
    uploadBy String 上传的管理员账户名
  • 成功响应

    • 状态码:200 OK
    • 返回数据:成功上传的文章信息
  • 示例

    {
         
        "title": "数据库规范",
        "author": "张三",
        "content": "这是一篇关于如何使用数据库规范的文章。",
        "file": "file.pdf",
        "tags": ["Mysql", "MyBatis"]
    }
    

3.1.2 上传附件接口

  • URL

    /api/fileUpload

  • Method

    POST

  • 请求体参数

    参数名 类型 是否必须 描述
    file MultipartFile 待上传的文件
  • 成功响应

    • 状态码:200 OK
    • 返回数据:上传成功的文件信息
  • 失败响应

    • 状态码:400 Bad Request
    • 返回数据:上传失败的错误信息
  • 示例

    POST /api/upload
    Content-Type: multipart/form-data
    Content-Disposition: form-data; name="file"; filename="example.pdf"
    
    [文件内容]
    
    

3.1.3 删除附件

点击取消上传按钮。

  • URL

    /upload/deleteFile?filePath='+encodeURIComponent(filePath)

  • Method

    POST

  • 求参数

    参数名 类型 描述
    filePath String 文件存放路径
  • 成功响应

    • 状态码:200 OK

3.1.4 管理标签

管理知识库中的标签。

  • 新增标签

    新增一个标签到知识库。

    • URL

      /api/tags/add

    • Method

      POST

    • 求参数

      参数名 类型 描述
      tagName String 新增的标签
    • 成功响应

      • 状态码:200 OK
      • 返回数据:成功新增的标签信息
  • 删除标签

    从知识库中删除一个标签。

    • URL

      /api/tags/:tagId/remove

    • Method

      DELETE

    • 路径参数

      参数名 类型 描述
      ID INT 标签ID
    • 成功响应

      • 状态码:200 OK
  • 修改标签

    修改知识库中的一个标签。

    • URL

      /api/tags/:tagId/update

    • Method

      PUT

    • 路径参数

      参数名 类型 描述
      tagId INT 标签ID
    • 请求参数

      参数名 类型 描述
      tagName String 修改后的标签
    • 成功响应

      • 状态码:200 OK
      • 返回数据:成功修改的标签信息

3.1.5 将上传的文件信息插入数据库

  • URL/api/upload/fileinfo

  • 请求方法POST

  • 请求体参数:

参数名 备注
file_name 原始文件名
file_path 文件在服务器或云存储中的路径
file_size 文件大小,以字节为单位
file_type 文件的 MIME 类型
  • 响应
    成功:200
    失败:失败信息

3.2 用户接口

3.2.1 搜索知识库

搜索知识库中的文章。

  • URL

    /api/search

  • Method

    GET

  • 请求参数

    参数名 类型 描述
    keyword String 搜索关键词
    isTitle Boolean 标题复选框是否勾选
    isContent Boolean 内容复选框是否勾选
    isAuthor Boolean 作者复选框是否勾选
    isFile Boolean 文件复选框是否勾选
    tagIds Array 标签ID列表(可选参数)
    page Integer 页码(默认为1)
    pageSize Integer 每页数量(默认为10)
  • 成功响应

    • 状态码:200 OK
    • 返回数据:符合搜索条件的文章列表
    • 分页信息:总页数、当前页码、每页数量、总文章数
  • 示例
    GET /api/search?keyword=SpringBoot&isTitle=true&isContent=false&isAuthor=false&isFile=false&tagIds=1,2,3&page=1&pageSize=10

3.2.2 获取文章详情

获取指定文章的详细信息。

  • URL

    /api/articles/{articleId}

  • Method

    GET

  • 路径参数

    参数名 类型 描述
    articleId Integer 文章ID
  • 成功响应

    • 状态码:200 OK
    • 返回数据:指定文章的详细信息
  • 示例

    /api/articles/123

4 用户搜索实现算法

4.1 模糊查询

  • 实现原理:利用MySQL数据库sql语句中的like关键字实现,特别是LIKE配合通配符%_来进行模式匹配查询。

  • 优缺点
    优点

    • 灵活性强:模糊匹配通过LIKE操作符和通配符(如%_)提供强大的查询灵活性,能够根据部分信息查找记录,这对于搜索不完全确定的数据非常有用。

    • 简单易用:对于基本的模糊查询,使用LIKE操作符非常直观和简单,无需复杂的SQL知识即可上手。

    • 广泛适用:作为SQL标准的一部分,模糊匹配几乎被所有数据库管理系统支持,包括MySQL,这使得它成为一种普遍的查询手段。

    缺点

    • 结果可能不精确:模糊匹配可能返回大量相关性较低或不完全匹配的结果,用户需进一步筛选,这可能影响用户体验。
    • 不支持复杂模式匹配:尽管LIKE和基本正则表达式能处理简单模式,但对于更复杂的文本模式匹配需求,它们的功能较为有限。
  • 重要代码

 		SELECT
            a.ID as id,
            a.title as title,
            a.author AS author,
            f.file_name AS file_name,
            f.file_path AS file_path,
            c.content AS content,
            a.tags as tags

        FROM
            article a
                LEFT JOIN
            file_info f ON a.file_id = f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值