From 5a3e5c03cdd31334e945f9ac411eb04a0e7d6e2e Mon Sep 17 00:00:00 2001 From: "34047007@qq.com" <34047007@qq.com> Date: Mon, 27 Jul 2026 15:15:36 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E8=AE=B0=E5=BD=95=20P7-23=20=E6=B7=B7?= =?UTF-8?q?=E5=90=88=E5=B8=83=E5=B0=94=E5=BC=95=E6=93=8E=E5=88=86=E6=94=AF?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/13-搜索修复全记录.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/13-搜索修复全记录.md b/docs/13-搜索修复全记录.md index 257eaca..f3d3511 100644 --- a/docs/13-搜索修复全记录.md +++ b/docs/13-搜索修复全记录.md @@ -2,7 +2,7 @@ > 本文档按修复轮次详细记录所有搜索功能合规性修复的背景、根因分析和修改内容。 > -> **累计**:7 轮,97 项修复,50+ 字段标签注册,276 项测试覆盖 +> **累计**:7 轮,98 项修复,50+ 字段标签注册,276 项测试覆盖 > **时间跨度**:2026-07-24 ~ 2026-07-27 > **核心文件**:`pubmed_query_parser.py`(~730 行)→ `search_engine.py`(~1320 行) @@ -631,7 +631,14 @@ - **文件**:`pubmed_query_parser.py` `_parse_or_expr()` L475 - **问题**:`A OR B AND C` 被拉平为 3 个 term OR:`A OR B OR C`。PubMed 语义应是 `A OR (B AND C)` - **根因**:`_parse_or_expr` 对 `left`/`right` 做 `extend`,AND cluster 全部拉平 -- **修复**:收集各 `_parse_and_expr` 结果为独立 cluster,OR 存在时将 >1 term 的 cluster 包装为 group + `group_operators="and"`。引擎 OR 模式将 groups 互相 OR,组内 AND +- **修复**:收集各 `_parse_and_expr` 结果为独立 cluster,OR 存在时将 >1 term 的 cluster 包装为 group + `group_operators="and"`。引擎 OR/mixed 模式将所有正条件 OR 合并,组内 AND + +### P7-23: 混合布尔引擎分支 — boolean_operator="mixed" 丢失 OR + +- **文件**:`search_engine.py` `_pubmed_conditions()` L616, L952 +- **问题**:`A OR B AND C` → parser 产 `boolean_operator="mixed"`。引擎只处理了 `=="or"`,`"mixed"` 落到 else(AND),组间 OR 完全丢失 +- **根因**:`boolean_operator` 有三种值(and/or/mixed),引擎只有二分支 +- **修复**:`field_combine` 和 `term_conditions` 合并都改为 `in ("or", "mixed")` ---