fix: 第二轮PubMed搜索合规审计 — 8项修复 + 6项新测试
CI / backend (push) Canceled after 0s
CI / frontend (push) Canceled after 0s

F1: search_engine.py `_pubmed_conditions` 顶层 [MH:noexp] 丢失 _noexp 标志
    按 _noexp 分组 mesh_terms,分别调用 _expand_mesh_tag_ids(noexp=True/False)

F2: search_engine.py 组内 NOT 违反 De Morgan 律
    全组 is_not=True 时单 NOT 包裹组合条件而非 per-term not_()

F3: pubmed_query_parser.py `_parse_not_expr` 不支持重复 NOT
    改为递归调用,NOT NOT toggle is_not(三重 NOT 正确)

F4: SearchView.vue Custom Range datePreset 不发送日期参数
    增加 datePreset === 'custom' 分支发送 year_from/year_to

F5: HomeView.vue restoreFromUrl 恢复不全
    补全 sort/field/retracted/negative_result

F6: AdvancedSearchPanel.vue precision_mode 死控件移除(UI+emit+reset)
    types/index.ts precision_mode 死类型字段移除

F7: types/index.ts is_oa 标记为 unused, reserved

F8: search_engine.py `_expand_mesh_tag_ids` N+1 → 2 批量查询
    所有 entry_terms 和 name_en 分别合并为 OR 查询

测试: 新增 NOT NOT/triple NOT/NOT group/DM:noexp 顶层 共 7 项
This commit is contained in:
34047007@qq.com
2026-07-27 10:30:40 +08:00
parent 723c4fc5c9
commit e688241355
7 changed files with 106 additions and 35 deletions
+1 -2
View File
@@ -339,13 +339,12 @@ export interface SearchRequestBody {
journal_tiers?: string[]
tag_ids?: string[]
pub_types?: string[]
is_oa?: boolean | null
is_oa?: boolean | null // unused, reserved for future OA filter UI
language?: string | null
languages?: string[]
nlm_subsets?: string[]
retracted?: string
negative_result?: string
precision_mode?: string
// PubMed 筛选器
has_abstract?: boolean
is_free_full_text?: boolean