# Pubmed Systematic Search

> Bounded, reproducible review-seed search using generate_search_queries and unified_search. Triggers: 系統性搜尋, 完整搜尋, 文獻回顧, systematic search, comprehensive, MeSH expansion, 同義詞

- Skill: `u9401066-pubmed-search-mcp/pubmed-systematic-search` (Agent Skill)
- Install (CLI): `npx skillmds@latest add u9401066-pubmed-search-mcp/pubmed-systematic-search`
- Raw SKILL.md: https://api.skillmd.com/api/skills/u9401066-pubmed-search-mcp/pubmed-systematic-search/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: u9401066 (https://skillmd.com/u/u9401066-pubmed-search-mcp)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/u9401066-pubmed-search-mcp/pubmed-systematic-search

---


# 系統性回顧種子搜尋

## 描述
這個 workflow 用來建立可重現、可稽核的系統性回顧搜尋種子，而不是宣稱已找完所有文獻。核心做法是先用 `generate_search_queries` 取得 MeSH、同義詞與建議查詢，再由 Agent 或使用者組裝 provider-neutral Boolean 查詢，最後以唯一公開的文字文獻搜尋入口 `unified_search(options="systematic")` 執行有界檢索。

> `systematic` 是 bounded retrieval primitive：公開介面每個來源最多取回 100 筆，適合 review seed 與可重現的 coverage expansion，不代表 exhaustive systematic-review coverage。正式回顧仍需保存完整策略、逐來源檢索日期、後續分頁/補充來源與篩選紀錄。

## 觸發條件
- 「系統性搜尋」
- 「完整搜尋」
- 「文獻回顧」
- 「comprehensive search」
- 「systematic review」
- 提到 MeSH、同義詞擴展、搜尋策略

---

## 正確工作流程

```text
generate_search_queries
→ 整理 MeSH / 同義詞 / suggested_queries
→ 手動或由 Agent 組 provider-neutral Boolean 查詢
→ analyze_search_query
→ unified_search(options="systematic")
→ fetch_article_details / prepare_export / save_pipeline
```

> 目前沒有公開的獨立合併工具工作流。每一次 `unified_search` 本身就會做多來源整合與去重；如果你跑多輪策略，做法應該是比較各輪結果、調整查詢，或把流程保存成 pipeline，而不是依賴舊版 merge 思路。

---

## Step 1: 取得搜尋素材

```python
generate_search_queries(
    topic="remimazolam ICU sedation",
    strategy="comprehensive"
)
```

### `strategy` 選項

- `comprehensive`: 預設，適合完整展開查詢素材；不代表結果已窮盡
- `focused`: 收斂到較高證據等級
- `exploratory`: 放寬，找更多變體與同義詞

### 你真正要用的欄位

- `mesh_terms`: 標準詞彙與對應同義詞
- `all_synonyms`: 可直接組 OR 群組
- `suggested_queries`: 當作參考，不是最後答案
- `pubmed_translation`: 檢查 PubMed 實際如何理解查詢

---

## Step 2: 組裝 Boolean 查詢

### 範例：從素材組出跨來源可執行查詢

```python
query = '''
("intensive care" OR ICU OR "critical care")
AND
(remimazolam OR "CNS 7056" OR "ONO 2745")
AND
(sedation OR "procedural sedation")
'''
```

### 兩個原則

1. 主概念之間通常用 `AND`
2. 同義詞與別名通常用 `OR`

PubMed 的 `[Title/Abstract]`、`[MeSH Terms]` 等 field tags 不是 provider-neutral 語法。含這些 tags 的查詢只送 `sources="pubmed"` 並使用預設 keyword mode；跨來源 systematic leg 使用上面的無欄位標籤 Boolean 查詢，讓各 provider adapter 依自身契約編譯。

---

## Step 3: 執行前先分析

```python
analyze_search_query(query=query)
```

這一步用來確認：

- 查詢是否太寬或太窄
- PubMed translation 是否符合預期
- 有沒有拼字或概念錯置

---

## Step 4: 執行搜尋

```python
unified_search(
    query=query,
    sources="openalex,semantic_scholar",
    options="systematic",
    limit=100,
    ranking="quality",
    filters="year:2020-2025",
    output_format="json"
)
```

`options="systematic"` 會關閉 deep expansion 與自動放寬，並在 I/O 前拒絕不支援此模式的 explicit source。現在的 bounded systematic sources 只有 OpenAlex 與 Semantic Scholar；PubMed、Europe PMC、CORE、Scopus、Web of Science 與 preprint adapters 目前是 keyword-only，若要納入需另跑並標記為 supplemental search。

### 常用調整方式

- 想補最新未同行評審研究：另跑 `options="preprints"` 的 keyword search，並標成補充來源
- 想做快速探索：另跑 `options="shallow"`，不要把它標成 systematic run
- systematic mode 已停用自動放寬；不要用放寬後的結果冒充原始策略命中
- 重視新近性：`ranking="recency"`
- 重視證據品質：`ranking="quality"`

---

## 端到端範例

### 情境：建立 remimazolam ICU sedation 的 bounded review seed

```python
# Step 1: 取得 MeSH 與同義詞素材
materials = generate_search_queries(
    topic="remimazolam ICU sedation",
    strategy="comprehensive"
)

# Step 2: 組裝查詢
query = '''
("intensive care" OR ICU OR "critical care")
AND
(remimazolam OR "CNS 7056" OR "ONO 2745")
AND
(sedation OR "procedural sedation")
'''

# Step 3: 先分析
analyze_search_query(query=query)

# Step 4: 再執行
unified_search(
    query=query,
    sources="openalex,semantic_scholar",
    options="systematic",
    limit=100,
    ranking="quality",
    filters="year:2020-2025",
    output_format="json"
)
```

### PubMed-only fielded leg

如果 protocol 需要 PubMed 欄位限定，另建一個只送 PubMed 的 leg，不要把同一字串傳給其他 provider：

```python
pubmed_fielded_query = '''
("intensive care"[Title/Abstract] OR ICU[Title/Abstract])
AND
(remimazolam[Title/Abstract] OR "CNS 7056"[Title/Abstract])
AND
(sedation[Title/Abstract] OR "procedural sedation"[Title/Abstract])
'''

unified_search(
    query=pubmed_fielded_query,
    sources="pubmed",
    limit=100,
    filters="year:2020-2025",
    output_format="json"
)
```

---

## 如果結果太少或太多

### 結果太少

- 把 `strategy` 改成 `exploratory`
- 移除部分限制條件
- 減少 `AND`、增加同義詞 `OR`
- 移除 `clinical_query` 或過窄的年齡/性別限制

### 結果太多

- 把 `strategy` 改成 `focused`
- 增加主題限定詞
- 加上 `filters="year:...,clinical_query:..."`
- systematic leg 只用 OpenAlex / Semantic Scholar；若使用 PubMed field tags，則另跑 `sources="pubmed"` 的 keyword leg

---

## 可重複使用時

當搜尋策略已經穩定，不要每次重組：

```python
save_pipeline(name="icu_sedation_review", config="...")
```

之後可以：

```python
unified_search(pipeline="saved:icu_sedation_review")
```

