fix: 第8轮搜索深度审计修复 — 缓存失效、Redis重试、中文标签、翻页稳定性等12项
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s

CRITICAL:
- invalidate_search_cache 清理 atm:* 缓存(MeSH ATM扩展不再用过期结果)
- Pro 方案 api_quota_per_day 1000→10000(修复低于 Free 的数据错误)
- CacheService/RateLimitMiddleware Redis 连接失败60秒自动重试(原永久降级)
- 普通搜索中文输入自动匹配 GlobalTag.name_zh(如"肺癌"通过MeSH标签关联文献)
- AdvancedPubSearchView resolveQuery 添加 seen Set 检测交替 #N 循环引用

HIGH:
- 限速器 _burst_windows 每500请求清理过期条目(防止内存泄漏)
- cron daily_ftp_update 末尾调用 invalidate_search_cache()(自动管道不再用过期缓存)

MEDIUM:
- _apply_order_by ASC 排序加 id tiebreaker(title/journal/first_author翻页跳行/重复)
- _keyset_condition 所有 is_(None) 加 id tiebreaker + __NULL__ 哨兵值
- _field_condition("all") 默认tsvector路径加 journal/journal_iso ILIKE 兜底
- SearchView restoreFromQuery date_preset/year_from/year_to 优先顺序修复

docs: 更新 12/13 搜索文档,移除 CLAUDE.md 陈旧 SQLite 提及
This commit is contained in:
34047007@qq.com
2026-07-28 11:02:29 +08:00
parent c50831d1d8
commit 73f9468384
34 changed files with 696 additions and 218 deletions
+2 -2
View File
@@ -26,7 +26,7 @@ Phase 1 (5天) ✓ Phase 2 (8天) ✓ Phase 3 (8天)
Phase 4 (新增 — 完成) Phase 5 (新增 — 完成) Phase 6 (新增 — 完成)
Meta 分析基础设施 搜索增强 + 数据深化 数据 + AI 深化
├─ 系统评价 CRUD ├─ PMC OA 全文管道 ├─ SQLite → PG 迁移
├─ 系统评价 CRUD ├─ PMC OA 全文管道 ├─ PG 全文搜索迁移
├─ 研究设计分类引擎 ├─ Table 1 结构化提取 ├─ tsvector 全文搜索
├─ RCT 两档检测(confirmed/susp) ├─ 许可证/撤稿标记 ├─ 纳入篇数额度模型
├─ PICO AI 抽取 ├─ 阴性结果检测 ├─ 机构版私有化交付
@@ -198,7 +198,7 @@ Phase 4 ──→ Phase 5 ──→ Phase 6
| 4. tsvector 迁移脚本 | Alembic: `e8f9a0b1c2d3_add_search_tsv` 已存在 | - | ✅ |
| 5. tsvector 触发器 | BEFORE INSERT OR UPDATE 触发器 + backfill 已存在 | 步骤 4 | ✅ |
| 6. 重写搜索 | `search_engine.py` ILIKE → `search_tsv @@ plainto_tsquery` + `ts_rank` 排序 | 步骤 5 | ✅ |
| 7. 删除 SQLite 兼容垫片 | `study_design` 改用 JSON path`pub_types` JSONB cast PG 原生 | 步骤 6 | ✅ |
| 7. 数据库适配层清理 | `study_design` 改用 JSON path`pub_types` JSONB cast PG 原生 | 步骤 6 | ✅ |
| 8. 机构版交付文档 | docs/deployment-guide.md + docker-compose.prod.yml 说明 | 步骤 7 | ✅ |
| 9. Europe PMC 游标分页 | `pubmed_api.py` + `admin.py` — cursor-based search`?_source=europe_pmc` | 步骤 8 | ✅ |
| 10. DOI 跨源去重 | `_process_article` DOI 匹配 → 同 DOI 不同 PMID 时原地更新 | 步骤 9 | ✅ |