feat: 第四轮PubMed搜索字段补全 — 11项修复
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s

- [Title/Abstract]/[OAB]/[WORD]/[FI]/[SO]/[PL] 注册
- [GEN] 基因符号搜索 → gene_symbols JSONB
- [PMC] PMCID 搜索 → pmc_id 列
- [OT] 语义修复 → keywords JSONB(不再映射到 all)
- phraseto_tsquery 精确短语(GIN 索引替代 ILIKE)
- has_pubmed_terms 门控补全新字段
- 127 项搜索测试全部通过,前端构建无报错
This commit is contained in:
34047007@qq.com
2026-07-27 11:19:10 +08:00
parent 6a8eb70dde
commit 807972d41b
4 changed files with 117 additions and 20 deletions
+6 -5
View File
@@ -1,7 +1,7 @@
# 搜索功能实施计划
> 计划日期:2026-07-24
> **最后更新**2026-07-27轮修复已完成)
> **最后更新**2026-07-27轮修复已完成)
> **硬性目标:搜索功能必须与 PubMed 完全一致。不允许"暂缓/可以忽略/不急"的降级。**
> **当前状态:42+ 字段标签已接通,127 项搜索测试通过,核心功能就绪。**
> 基于 9 Agent 审计 + 真实数据库 1,662 篇字段覆盖率验证
@@ -15,9 +15,10 @@
| 阶段 0 — 关键 Bug 修复 | ✅ 已完成 | 12 项 | search_engine + pubmed_api + 前端 |
| 阶段 1 — P0 功能 | ✅ 已完成 | 8 项 | parser + engine + 前端 |
| 阶段 2 — P1 功能 | ✅ 已完成 | 16 项 | parser + engine + 前端 |
| 阶段 3 — P2 完整覆盖 | ⏳ 部分完成 | — | 标签字段 42+ 已开,搜索历史等待办 |
| 阶段 3 — P2 完整覆盖 | ⏳ 部分完成 | — | 标签字段 50+ 已开,搜索历史等待办 |
| 轮次 2 — 第二轮审计修复 | ✅ 已完成 | 8 项 | De Morgan, noexp, 重复 NOT 等 |
| 轮次 3 — 第三轮审计修复 | ✅ 已完成 | 14 项 | SB/STAT 门控, 日期精度, [ALL] 注册等 |
| 轮次 4 — 第四轮字段补全 | ✅ 已完成 | 11 项 | 8 字段注册, OT/GEN/PMC 语义, phraseto_tsquery |
## 阶段 0 — 关键 Bug 修复 ✅(已完成)
@@ -195,7 +196,7 @@ score = (
| 2.3 | `[TW]` 文本词字段标签 | 直接映射到 `search_tsv @@ plainto_tsquery()` | ✅ Done(映射到 "all" |
| 2.4 | `[OT]` (keywords JSON)、`[GR]` (grants JSON)、`[NM]` (chemical_list JSON) | 三字段字段标签 + SQL `jsonb_array_elements` + ILIKE | ✅ Done |
| 2.5 | `*` 通配符截词 | 检测 `word:*` 模式 → `to_tsquery('english', 'word:*')` | ❌ 未实现 |
| 2.6 | `[Title/Abstract]` 长标签 | 解析器添加 `Title/Abstract` → `TIAB` 等价 | ✅ `TIAB` 已支持,长标签未注册 |
| 2.6 | `[Title/Abstract]` 长标签 | 解析器添加 `Title/Abstract` → `TIAB` 等价 | ✅ P4 已注册(映射到 all |
| 2.7 | `[ALL]` 标签识别 | 解析器添加 `ALL` → `all` 字段映射 | ✅ 第三轮修复 P1-1 |
| 2.8 | Field tag 附着规则 + 单值 DP + 日期格式 | 解析器修复 4 个语法场景 | ✅ 第三轮修复 P1-2, P1-3 |
| 2.9 | **Entry Terms 导入** | `desc2025.asc` 解析器 → `GlobalTag.entry_terms` | ✅ 完整 MeSH 导入脚本 |
@@ -205,7 +206,7 @@ score = (
| 2.13 | 补全测试覆盖 | 28/46 零覆盖区域补全 | ✅ 127 项测试 |
| 2.14 | Europe PMC 7 字段补全 | grants 从 JSON 解析,其余标记 | ✅ Done |
| 2.15 | API 碎片清理 | 移除 `/literature/search`、Feed 集成 tsvector | ⏳ 部分完成 |
| 2.16 | `phraseto_tsquery` 精确短语 | 替代 ILIKE 用 GIN 索引 | ❌ 未实现 |
| 2.16 | `phraseto_tsquery` 精确短语 | 替代 ILIKE 用 GIN 索引 | ✅ P4 已实现 |
---
@@ -215,7 +216,7 @@ score = (
| # | 任务 | 状态 |
|---|------|------|
| 3.1 | 其余字段标签:目前已有 42+ 标签注册,[PL]/[SO]/[PMC]/[GEN]/[REF] 等 7 个未注册 | ⏳ 低频 |
| 3.1 | 其余字段标签:目前已有 50+ 标签注册,仅 [REF]/[ISBN] 等低频未注册 | ⏳ 低频 |
| 3.2 | 搜索历史(`/search/history` 端点 + UI) | ❌ 未实现 |
| 3.3 | MeSH 自动补全(`/tags/autocomplete` + debounce | ❌ 未实现 |
| 3.4 | 查询构建器 UI(布尔组合、括号分组) | ✅ AdvancedSearchPanel 已实现 |