一个基于Spring Boot + React的前后端分离 知识管理平台,具备(针对已OCR的)PDF文档/图书管理与全文检索功能,并接入AI大模型。
- 支持多用户
- 自定义标签体系
- PDF文档/图书管理
- PDF文档全文检索
- PDF文档关键词高亮显示
- 书籍基本信息一键搜刮
- 完备的后端API文档
- 接入AI大模型对话-DeepSeek
- 检索报告、笔记管理
- 检索报告导出、分享
- Prompt提示词管理,与笔记联动
- 结合AI大模型,实现检索报告的自动生成
注意:用户管理界面需要管理员权限
支持图书及其他PDF文档导入 支持图书标签分类
支持批量导入
支持图书基本信息一键搜刮
支持文档标签设置
文档基本检索
文档全文预览
支持层级主题/标签分类
支持自定义标签分类
检索结果关键词高亮显示、按条件过滤、命中书籍页面关键词高亮显示
支持高级检索:支持多字段多条件检索,支持同段、同句检索
支持在PDF页面中选中文本添加为笔记,可添加到指定检索报告中(通过在检索报告页面设置关联菜单)
支持添加/管理检索报告、搜索检索报告;
支持笔记删除、编辑管理,支持笔记复制; 支持笔记拖动排序,自带层级序号
接入AI大模型,暂支持DeepSeek大模型
- Spring Boot 3.2.1
- MySQL 8.0
- Elasticsearch 8.12.2
- Redis 7.2
- MinIO
- Sa-Token 认证
- MyBatis-Plus
- PDFBox
- Swagger
- Knife4j
- React 18
- Ant Design
- UmiJS
- TypeScript
CPU:
- Elasticsearch: 至少 2 核心
- MySQL: 至少 1 核心
- 其他服务 (Redis, MinIO, Backend, Frontend): 共需 2 核心
- 总计最小需求:4-6 核心 CPU
内存 (RAM):
- Elasticsearch: 至少 2GB(通过 ES_JAVA_OPTS 配置)
- MySQL: 至少 1GB
- Redis: 512MB
- MinIO: 512MB
- Backend (Java 应用): 1GB
- Frontend + Nginx: 512MB
- 总计最小需求:6GB RAM
存储空间:
- Elasticsearch 数据: 至少 10GB
- MySQL 数据: 至少 5GB
- Redis 数据: 1GB
- MinIO 对象存储: 10GB(取决于文档存储需求)
- 应用日志和其他: 2GB
- 总计最小需求:30GB 存储空间
网络:
- 建议至少 100Mbps 带宽
- 所有服务都在同一个 bridge 网络中
为了获得更好的性能和稳定性,建议:
- CPU: 8 核心
- 内存: 16GB RAM
- 存储: 100GB SSD
- 网络: 1Gbps
- Elasticsearch 是最消耗资源的服务,特别是内存使用
- 如果有大量并发用户,应该相应增加内存和 CPU
- 如果需要存储大量文档,需要相应增加 MinIO 的存储空间
- 建议使用 SSD 存储以提高性能,特别是对 Elasticsearch 和 MySQL
- 需要根据实际使用场景(并发用户数、数据量、文档存储需求等)来调整这些配置。
- Docker 20.10.x 及以上(推荐部署方式)
- Docker Compose 2.x 及以上
- Git
- JDK 17+
- Node.js 18+
- Maven 3.8+
- MySQL 8.0
- Redis 7.2
- Elasticsearch 8.12.2
- MinIO
前置条件:
- 安装 Git: Download Git
- 安装 Docker: Download Docker
- 安装 Docker Compose: Download Docker Compose
git clone https://github.com/wellgone/LexiBookSearch.git
cd LexiBookSearch- 复制环境变量模板:
cp .env.example .env- 修改
.env文件,配置必要的环境变量:
# MySQL配置
MYSQL_ROOT_PASSWORD=your_password
MYSQL_DATABASE=LPMS
MYSQL_PORT=3306
# Redis配置
REDIS_PASSWORD=your_redis_password
REDIS_PORT=6379
# Elasticsearch配置
ELASTICSEARCH_PORT=9200
ELASTIC_USERNAME=elastic
ELASTIC_PASSWORD=your_es_password
ES_JAVA_OPTS="-Xms1g -Xmx1g"
# MinIO配置
MINIO_ROOT_USER=your_minio_user
MINIO_ROOT_PASSWORD=your_minio_password
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
# 后端配置
BACKEND_PORT=9090
SPRING_PROFILES_ACTIVE=prod
JAVA_OPTS=-Xms1024m -Xmx1024m
# Nginx配置
NGINX_PORT=80
NGINX_SSL_PORT=443
# AI配置(可选)
DEEPSEEK_API_KEY=your_api_key注意:请根据自身数据量调整ES、Java的内存配置。
# 启动所有服务
docker-compose up -d
# 注意1:如果Docker Compose 是standalone版,应当使用`docker compose up -d`,下同;
# 注意2:如果需要只是重建部分服务,应当在重建完成后重启Nginx服务。
# 查看服务状态
docker-compose ps
# 查看服务日志
docker-compose logs -f- 主控台: http://localhost:80
- 后端API: http://localhost:9090/doc.html
- MinIO控制台: http://localhost:9001
- Elasticsearch: http://localhost:9200
- 配置Java环境
# 确保安装JDK 17+
java -version-
配置application.yml
-
编译打包
cd bookMS
mvn clean package -DskipTests- 运行后端服务
java -jar target/bookms.jar- 安装依赖
cd bookApp
npm install
或 yarn install- 配置环境变量
cp .env.example .env.production编辑.env.production:
VITE_API_URL=http://localhost:9090
VITE_ES_URL=http://localhost:9200
VITE_ES_USERNAME=elastic
VITE_ES_PASSWORD=your_es_password- 构建前端
npm run build- 配置Nginx
因本项目为前后端分离项目,注意配置相关代理,否则无法访问后端API;可参考默认配置;
- 在IDE中导入bookMS项目
- 配置application.yml中的数据库等连接信息
- 运行LvPiApplication主类
- 进入bookApp目录
- 安装依赖:
yarn install- 启动开发服务器:
yarn dev.
├── bookMS/ # 后端项目
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/com/bookms/
│ │ │ │ ├── controller/ # REST API 控制器
│ │ │ │ ├── service/ # 业务逻辑层
│ │ │ │ ├── repository/ # 数据访问层
│ │ │ │ ├── model/ # 数据实体类
│ │ │ │ ├── config/ # 配置类
│ │ │ │ ├── utils/ # 工具类
│ │ │ │ └── Application.java # 启动类
│ │ │ └── resources/
│ │ │ ├── application.yml # 主配置文件
│ │ │ ├── bootstrap.yml # 环境配置
│ │ │ └── mapper/ # MyBatis XML映射文件
│ │ │
│ │ └── Dockerfile # 后端Dockerfile
│ └── pom.xml # Maven依赖配置
│
├── bookApp/ # 前端项目
│ ├── src/
│ │ ├── pages/ # 页面组件
│ │ ├── components/ # 通用UI组件
│ │ ├── services/ # API请求服务
│ │ ├── models/ # 数据模型
│ │ ├── layouts/ # 全局布局
│ │ ├── config/ # UmiJS配置
│ │ ├── public/ # 静态资源
│ │ └── global.less # 全局样式
│ ├── Dockerfile # 前端Dockerfile
│ ├── package.json # 依赖配置
│
├── docker/ # Docker相关配置
│ ├── config/ # 配置文件
│ │ ├── backend/ # 后端配置文件
│ │ ├── frontend/ # 前端配置文件
│ │ └── elasticsearch/ # ES配置文件
│ ├── nginx/ # Nginx配置
│ │ └── nginx.conf
│ └── filedata/ # 文档数据
└── docker-compose.yml
注意!注意!注意!全文检索系基于OCR处理后的文本层,如要实现PDF全文检索,PDF文档导入系统前需经过OCR处理。
OCR的精确度很大程度决定全文检索的准确性。
章节管理以及索引管理页面可以看到实际的OCR结果。
请务必按顺序操作:导入/添加图书信息 --> 获取OPAC数据(如不希望获取可以跳过) --> 添加标签分类(如不希望添加可以跳过) --> 抽取内容并建立索引 --> 全文检索;
注意:
- 添加标签需在建立索引之前,否则全文检索时无法按标签过滤数据;
- 抽取内容并建立索引,需要等待一段时间,具体取决于图书数量和系统配置,请耐心等待。
- 批量导入图书信息时,请按
book_import_template.xlsx模板格式导入,否则会导致导入失败;如类型为图书,其中书名与isbn 为必填项,其他项为选填项;图书路径应当是(挂载)filedata目录下的相对路径,如:book.pdf、/文件夹2/book2.pdf、/文件夹3/book3.pdf;
- 单文导入
1.1 导入:在“图书/文档管理”页面,点击“新增”按钮,填写基本信息后上传文档(注意上传文档前请先保存基本信息);如希望在全文检索中可以通过标签及主题分类过滤,应当在此时设置主题标签及自定义标签;
1.2 获取OPAC(可选):点击“获取OPAC”按钮,即可通过书籍类文档的ISBN号从“http://opac.nlc.cn/”网站书籍基本信息。
1.3 抽取:在“图书/文档管理”页面,点击“抽取”按钮,即可将PDF文档抽取为文本层。
1.4 索引:在“图书/文档管理”页面,点击“索引”按钮,即可将文本层索引为全文检索服务。
- 批量导入
2.1 按book_import_template.xlsx模板编辑待导入文档信息;
2.2 在“图书/文档管理”页面,点击“批量导入”按钮,选择导入Excel文档,点击“确认”按钮,即可实现批量自动导入;
2.3 导入完成后,如需要获取OPAC信息,可点击“获取OPAC”按钮;
2.4 点击“提取&索引”按钮,即可实现批量自动抽取及索引。
按上述步骤导入文档后即可在全文检索页面进行全文检索。
通过给文档打标签可以给文档添加添加更多的分类,方便在检索后进行过滤。
该标签体系设计,不管是带层级关系还是不带层级关系标签都可无限维度拓展,但考虑到通用性,本项目在全文检索页面中只设了“通用标签”以及“主题分类”两个维度;如有需要,请按业务需求自行拓展。
lp_topic表是基于图书的分类,每个标签代表一个图书的分类,标签可以有多个,每个标签可以有多个文档。
-
【带层级关系的主题分类】
这类标签具有父子关系,使用 parent_id 存储父标签。
• 约定:level 数值采用自然树中所处的深度(如0、1、2、3……)
• 要求:由于一般层级不会太深,约定由 0 到 99 表示树状结构的层级关系。 -
【不带层级的通用自定义标签】
这类标签没有父子关系,且应用单一业务场景。
• 约定:将 level 固定为 100
• parent_id 固定为 0,表示没有层级结构。 -
【不带层级的书籍类型】
比如民法、刑法等,这里认为这类标签无需层级结构。
• 约定:将 level 固定为 101
• parent_id 固定为 0。 -
【不带层级的实务专题】
例如劳动专题、执行专题等,同样不具有层级关系。
• 约定:将 level 固定为 102
• parent_id 固定为 NULL。 -
【不带层级的其他分类】
根据业务需求,可以自定义标签,但是不具有层级关系。
• 约定:将 level 固定为 103...
• parent_id 固定为 NULL。
- 本系统仅供个人学习、研究及合法知识管理用途
- 禁止用于以下非法用途:
- 传播盗版电子书、未经授权/许可的他人知识产权作品
- 存储或传播违法、涉密信息
- 任何违反当地法律法规的行为
- 使用者需对自身行为负责,开发者不承担任何因非法使用导致的任何责任
本项目采用 AGPLv3 协议 进行开源,并附加以下商业条款:
- ✅ 允许个人用户自由使用、修改和分发
- ✅ 必须保留原始版权声明和许可证文件
⚠️ 商业使用(包括但不限于集成到SaaS平台、商业解决方案、盈利性服务等)必须获得书面授权⚠️ 禁止去除/修改原始版权声明⚠️ 禁止用于违法用途
完整授权条款请参见:
如需商业授权,请联系:law_pi@163.com

















