34047007@qq.com a4d27da8ea
CI / backend (push) Waiting to run
CI / frontend (push) Waiting to run
fix: 生产高级搜索 500 — 预算超时降级 + pub_date 排序索引 + affiliations_text trgm 反范式列
- count/主查询独立短预算,超时降级不再 500:count 超时返回 _COUNT_CAP(10 万+)
  而非 0(修复"找到 0 条结果"、分页被隐藏),主查询超时降级空结果
- 年份筛选改用 pub_date 范围,主查询 ORDER BY pub_date DESC NULLS LAST, id DESC
  走新索引 ix_gl_pub_date_sort(Index Scan,替代 Parallel Seq Scan + Sort,89.5 万行 40s→<0.2s)
- affiliations_text 反规范化列 + gin_trgm 索引 + 触发器维护,替换 7 处 jsonb lateral
  EXISTS(病理查询慢 ~40x);存量由 scripts/backfill_affiliations.py 分批后台回填
- ATM 门控 _has_structured_terms:结构化查询(含字段标签)的 plain 词不做 MeSH 展开,
  修复 "lung neoplasms[MAJR]+年份" count 5s + main 6s 双超时(11.72s→2.02s)
- query_expansion/mesh IN(subquery) 去显式 DISTINCT(百万级 id 集合物化排序)
- alembic env 改 connect()(transaction_per_migration 每迁移独立事务,支持迁移内分批提交)
2026-08-10 21:48:42 +08:00

SciLit Oncology — 肿瘤科文献管理平台

快速启动

# 1. 启动所有服务
docker compose up -d

# 2. 初始化数据库(首次)
docker compose exec backend alembic upgrade head

# 3. 访问
# 前端: http://localhost:5173
# 后端 API: http://localhost:8000/docs
# MinIO 控制台: http://localhost:9001 (minioadmin/minioadmin)

项目结构

backend/
├── app/
│   ├── main.py              # FastAPI 入口
│   ├── config.py            # 配置
│   ├── db.py                # 数据库连接
│   ├── core/                # 核心:安全、权限、多租户中间件
│   ├── models/              # SQLAlchemy 模型 (32 张表)
│   ├── schemas/             # Pydantic 请求/响应
│   ├── api/v1/              # REST API 端点
│   └── tasks/               # ARQ 异步任务 (PubMed 管道)
├── alembic/                 # 数据库迁移
└── config/specialties/      # 科室配置 (oncology.yaml)

frontend/
├── src/
│   ├── views/public/        # 公开页面 (无需登录)
│   ├── views/auth/          # 登录/注册
│   ├── views/app/           # 已登录应用页面
│   ├── stores/              # Pinia 状态管理
│   ├── api/                 # Axios 封装
│   └── router/              # Vue Router

docs/                        # 完整设计文档 (9 份)

技术栈

  • 后端: FastAPI + SQLAlchemy 2.0 (async) + PostgreSQL 16 + Redis + Elasticsearch
  • 前端: Vue 3 + Naive UI + Pinia + Vite
  • 任务队列: ARQ
  • 文件存储: MinIO / S3
  • 多租户: PostgreSQL RLS + ContextVar 双层隔离

文档

详细的产品规划、数据库设计、标签体系、数据管道、UI 设计见 docs/ 目录。

S
Description
SciLit Backend - Oncology Literature Platform
Readme
145 MiB
Languages
Python 69.1%
Vue 25.7%
TypeScript 2.8%
Shell 1.9%
PLpgSQL 0.2%
Other 0.1%