项目结构.md 17 KB

LQMDRetrieval 项目结构说明

1. 项目概述

LQMDRetrieval 是一个多维度文档检索应用端,提供基于文档类型、发布日期、发布部门、关键词的多维度检索能力。检索引擎直接调用外部检索接口,实现在精准查询的同时支持文档在线预览。

功能域 说明
多维检索 按文档类型、发布日期、部门、关键词四维组合筛选与检索(调用外部接口)
文档预览 通过文件 UUID 读取 OSS 源文件,实现在线预览展示(调用外部接口)
分页与排序 支持检索结果分页展示与多维度排序管理(调用外部接口)
数据统计 统计检索结果文档总量,展示数据概览(调用外部接口)

2. 技术栈

类别 技术
语言 Python 3.12
Web 框架 FastAPI 0.104 + Uvicorn 0.24
ORM SQLAlchemy 2.0(异步)
主数据库 MySQL(aiomysql)
缓存 Redis(aioredis)
搜索引擎 调用外部检索接口
认证 python-jose (JWT) + passlib + bcrypt
数据校验 Pydantic 2.x
容器化 Docker + Docker Compose
前端框架 Vue 3 + Vite + Element Plus
路由 Vue Router 4
PDF 预览 PDF.js

3. 顶层目录结构

LQMDRetrieval/
├── backend/                    # 后端项目(FastAPI)
│   ├── requirements/           # Python 依赖管理
│   │   ├── base.txt            # 生产依赖
│   │   └── requirements.txt    # 完整依赖
│   ├── docker/                 # Docker Compose 编排
│   │   ├── docker-compose.yml
│   │   ── nginx/
│   ├── run.sh                  # 服务管理脚本
│   ├── run_server.py           # Python 入口
│   ├── Dockerfile
│   ├── src/                    # 后端源代码
│   └── .gitignore
│
├── web/                        # 前端项目(Vue 3)
│   ├── src/
│   ├── index.html
│   ├── package.json
│   ├── vite.config.ts
│   ├── tsconfig.json
│   └── .gitignore
│
├── docker/                     # 顶层 Docker 编排(前后端统一启动)
│   └── docker-compose.yml
│
├── 项目/                        # 设计文档、API 接口定义、需求文档
│
├── README.md
└── .gitignore

4. 后端源代码目录结构(backend/src/)

backend/src/
├── path_config.py                      # 自动配置 Python 导入路径
│
── app/
    ├── server/                         # FastAPI 应用工厂 & 入口
    │   ── app.py                      # 主 FastAPI 实例:中间件、CORS、异常处理、路由注册
    │
    ├── base/                           # 基础设施 / 连接管理
    │   ├── async_mysql_connection.py   # SQLAlchemy 异步 MySQL 连接
    │   └── async_redis_connection.py   # Redis 连接
    │
    ├── core/                           # 核心框架代码
    │   ├── config.py                   # ConfigHandler — 全局配置解析
    │   └── exceptions.py               # 自定义异常 BaseAPIException
    │
    ├── middleware/                     # HTTP 中间件
    │   └── token_refresh_middleware.py # JWT Token 自动刷新中间件
    │
    ├── models/                         # 通用 SQLAlchemy 模型
    │   └── base.py                     # 基础模型类
    │
    ├── schemas/                        # 基础 Pydantic 响应结构
    │   └── base.py                     # ResponseSchema / PaginationSchema
    │
    ├── utils/                          # 工具函数
    │   ├── auth_dependency.py          # 认证依赖注入
    │   └── security.py                 # 安全工具(密码哈希、Token 生成)
    │
    ├── services/                       # 业务逻辑层
    │   ├── auth_service.py             # 用户登录认证
    │   ├── jwt_token.py                # JWT Token 管理
    │   └── retrieval_service.py        # 多维检索服务(调用外部接口)
    │
    ├── retrieval/                      # 【多维检索模块】
    │   ├── models/                     # 检索相关 SQLAlchemy 模型
    │   │   └── search_history.py       # 搜索历史模型(暂保留)
    │   └── schemas/
    │
    ── auth/                           # 【授权管理模块】
        ├── models/                     # 认证 SQLAlchemy 模型
        │   └── user.py                 # 用户模型
        └── schemas/                    # 认证 Pydantic 结构
            └── auth_schema.py

├── views/                              # HTTP 路由定义(API 端点)
│   ├── auth_view.py                    # 认证路由(登录、Token 刷新)
│   └── retrieval_view.py               # 多维检索路由(核心接口)
│
└── api/                                # 对外 API 定义(v1 版本)
    └── v1/
        └── retrieval/                  # 检索对外 API

5. 前端项目结构(web/)

web/
├── src/
│   ├── main.ts                         # 应用入口
│   ├── App.vue                         # 根组件
│   ├── router/                         # 路由配置
│   │   └── index.ts
│   ├── api/                            # API 请求(按模块划分)
│   │   ├── auth.ts                     # 认证 API
│   │   └── retrieval.ts                # 检索 API
│   ├── components/                     # 可复用组件
│   │   ├── SearchBar.vue               # 搜索栏组件
│   │   ├── FilterPanel.vue             # 筛选面板组件
│   │   ├── ResultCard.vue              # 结果卡片组件
│   │   ├── Pagination.vue              # 分页组件
│   │   ├── SortDropdown.vue            # 排序下拉组件
│   │   └── StatsOverview.vue           # 统计概览组件
│   ├── layouts/                        # 布局组件
│   │   └── DefaultLayout.vue
│   ├── views/                          # 页面视图
│   │   ├── SearchPage.vue              # 检索主页
│   │   └── Auth/
│   │       ├── Login.vue               # 登录页
│   │       └── OAuthCallback.vue       # SSO 回调页
│   ├── utils/                          # 工具函数
│   │   ├── request.ts                  # Fetch 封装
│   │   └── helpers.ts
│   ── styles/                         # 全局样式
│       └── index.css
│
├── index.html
├── package.json
├── vite.config.ts
├── tsconfig.json
└── .gitignore

6. 功能模块详细说明

6.1 多维检索(retrieval/)— 调用外部接口

子功能 说明
按文档类型检索 根据文档类型进行筛选(法规制度、技术标准、操作指南、通知公告、工作报告等)
按发布日期检索 根据发布时间进行范围筛选
按部门检索 根据发布部门进行筛选(工程管理部、安全管理部、财务部、采购部、人力资源部)
按关键词检索 调用外部检索接口,实现精准查询
多维组合检索 支持上述维度任意组合,实现交叉筛选

6.2 文档预览(preview/)— 调用外部接口

子功能 说明
在线预览 通过文件 UUID 从 OSS 读取源文件,实现在线预览展示
PDF 预览 支持 PDF 文档在线渲染,包含放大、缩小、旋转、打印功能
分页导航 预览面板支持文档页码跳转与缩略图导航

6.3 分页与排序 — 调用外部接口

子功能 说明
分页展示 支持检索结果分页(默认每页 20 条)
多维度排序 支持按相关性、发布时间、浏览量等多维度排序

6.4 数据统计 — 调用外部接口

子功能 说明
结果总量统计 统计当前检索条件下匹配的文档总量
数据概览 按文档类型、发布部门、时间维度展示统计概览

7. 关键文件说明

文件 作用
backend/src/app/server/app.py FastAPI 应用实例,负责中间件、CORS、异常处理、路由注册
backend/src/app/core/config.py 全局配置读取(数据库连接、外部接口地址等)
backend/src/app/base/async_mysql_connection.py 异步 MySQL 连接池管理
backend/src/app/base/async_redis_connection.py Redis 连接池管理
backend/src/app/services/retrieval_service.py 多维检索服务:调用外部检索接口
backend/src/app/services/auth_service.py 用户登录认证服务
backend/src/app/services/jwt_token.py JWT Token 管理
backend/src/app/middleware/token_refresh_middleware.py Token 自动刷新中间件
backend/run_server.py 应用启动入口,uvicorn 启动器
backend/run.sh Shell 服务管理脚本

8. 数据流向

客户端请求
    ↓
Nginx 反向代理
    ↓
FastAPI (uvicorn :8000)
    ↓
middleware/token_refresh_middleware.py(Token 刷新)
    ↓
views/retrieval_view.py(检索路由匹配)
    ↓
services/retrieval_service.py(调用外部检索接口)
    ↓
MySQL(本地用户数据存储)
Redis(缓存 / Session)

9. 核心检索流程

用户输入关键词 + 筛选条件
    ↓
retrieval_service.py 转发请求到外部检索接口
    ↓
外部接口返回检索结果
    ↓
返回分页结果给前端

10. 项目架构分层

┌─────────────────────────────────────────────
│              views/ (路由层)                  │  ← HTTP 端点定义,按功能划分
├─────────────────────────────────────────────┤
│           services/ (业务逻辑层)              │  ← 检索转发、认证业务规则
├─────────────────────────────────────────────┤
│  retrieval/ (检索模块) │ auth/ (认证模块)     │  ← 按功能域划分的 models + schemas
├─────────────────────────────────────────────┤
│           utils/ (工具层)                    │  ← 认证依赖、安全工具
├─────────────────────────────────────────────┤
│           base/ (基础设施层)                 │  ← MySQL / Redis 连接
├─────────────────────────────────────────────┤
│    core/ (核心框架)  │ middleware/ (中间件)   │  ← 配置、异常、Token 刷新
└─────────────────────────────────────────────

11. 前端页面结构

┌─────────────────────────────────────────────────┐
│                    Header                        │  ← Logo + 多维度检索标题
─────────────────────────────────────────────────┤
│  ┌───────────────────────────────────────────┐  │
│  │              SearchBar                      │  │  ← 搜索输入框 + 搜索按钮
│  └───────────────────────────────────────────┘  │
─────────────────────────────────────────────────┤
│  ┌───────────────────────────────────────────┐  │
│  │             FilterPanel                     │  │  ← 文档类型/日期/部门/关键词筛选
│  │  - 文档类型标签(全部/法规/标准/指南...)   │  │
│  │  - 发布日期范围选择器                       │  │
│  │  - 发布部门标签(全部/工程/安全/财务...)  │  │
│  │  - 精准关键词输入                          │  │
│  └───────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│  ──────────────┐  ┌──────────────────────────┐ │
│  │ StatsOverview│  │  Sort & Pagination       │ │  ← 统计概览 + 排序/分页
│  │ (找到 N 个文档)│  │  相关性排序 / 时间排序    │ │
│  └──────────────┘  └──────────────────────────┘ │
─────────────────────────────────────────────────┤
│  ───────────────────────────────────────────┐  │
│  │           ResultCard (列表)                 │  │  ← 检索结果卡片列表
│  │  - 文档标题                                 │  │
│  │  - 类型/部门/日期/浏览量                    │  │
│  │  - 摘要(关键词高亮)                       │  │
│  │  - 标签                                     │  │
│  │  - 操作:文档预览 / 下载                    │  │
│  └───────────────────────────────────────────┘  │
─────────────────────────────────────────────────┘

文档预览弹窗(侧边抽屉):
┌─────────────────────────────────────────────────┐
│  PDF 标题 + 操作栏(放大/缩小/旋转/打印)         │
├─────────────────────────────────────────────────┤
│  ──────────────────────────────────────────┐  │
│  │          PDF.js 渲染区域                    │  │  ← PDF 文档在线预览
│  │          (支持翻页、缩放)                   │  │
│  └───────────────────────────────────────────┘  │
├─────────────────────────────────────────────────┤
│  下载按钮                                        │
└─────────────────────────────────────────────────┘

12. 数据库设计概要

12.1 搜索历史表(t_doc_search_history)

字段 类型 说明
id BIGINT 主键
user_id BIGINT 用户 ID
keywords VARCHAR(255) 搜索关键词
filters JSON 筛选条件快照
result_count INT 结果数量
created_at DATETIME 搜索时间

13. 与 LQAdminPlatform 的关系

维度 LQAdminPlatform LQMDRetrieval
定位 综合管理平台(系统管理+SSO+样本中心) 专用检索应用端
检索能力 样本中心内嵌语义检索 调用外部检索接口
文档预览 样本中心文档管理 调用外部预览接口
前端 Vue 3 + Element Plus 管理后台 Vue 3 + Element Plus 检索应用
后端架构 多模块(system/oauth/sample) 双模块(retrieval/auth)
技术复用 - 复用 LQAdminPlatform 的基础设施层(MySQL/Redis 连接、认证体系)