一般的なウェブ検索ではなく PubMed から生物医学文献が必要なタスクにこのスキルを使用します。
研究質問から始め、概念に分割し、ブール演算子で概念を組み合わせます。
concept_1 AND concept_2 AND filter
synonym_a OR synonym_b
NOT exclusion_term
有用な PubMed フィールドタグ:
[ti]: タイトル[ab]: アブストラクト[tiab]: タイトルまたはアブストラクト[au]: 著者[ta]: 雑誌タイトル略語[mh]: MeSH 用語[majr]: 主要 MeSH トピック[pt]: 出版種別[dp]: 出版日[la]: 言語例:
diabetes mellitus[mh] AND treatment[tiab] AND systematic review[pt] AND 2023:2026[dp]
(metformin[nm] OR insulin[nm]) AND diabetes mellitus, type 2[mh] AND randomized controlled trial[pt]
smith ja[au] AND cancer[tiab] AND 2026[dp] AND english[la]
概念が安定した統制語彙用語を持つ場合は MeSH を優先します。トピックが新しいまたは用語が多様な場合は MeSH とタイトル/アブストラクト用語を組み合わせます。
正しいサブヘッディング構文では、サブヘッディングをフィールドタグの前に置きます:
diabetes mellitus, type 2/drug therapy[mh]
cardiovascular diseases/prevention & control[mh]
[majr] は論文の中心的なトピックである必要がある場合にのみ使用します。精度は向上しますが、関連する研究を見逃す可能性があります。
出版種別:
clinical trial[pt]
meta-analysis[pt]
randomized controlled trial[pt]
review[pt]
systematic review[pt]
guideline[pt]
日付フィルター:
2026[dp]
2020:2026[dp]
2026/03/15[dp]
利用可能性フィルター:
free full text[sb]
hasabstract[text]
NCBI E-utilities は再現可能な API ワークフローをサポートします:
esearch.fcgi: 検索して PMID を返す。esummary.fcgi: 軽量な記事メタデータを返す。efetch.fcgi: XML、MEDLINE、またはテキストでアブストラクトまたはフルレコードを取得。elink.fcgi: 関連記事とリンクされたリソースを検索。本番スクリプトにはメールアドレスと API キーを使用します。API キーは環境変数に保存し、コミットされたファイルやコマンド履歴には絶対に入れないでください。
import os
import time
import requests
BASE = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils"
def esearch(query: str, retmax: int = 20) -> list[str]:
params = {
"db": "pubmed",
"term": query,
"retmode": "json",
"retmax": retmax,
"tool": "ecc-pubmed-search",
"email": os.environ.get("NCBI_EMAIL", ""),
}
api_key = os.environ.get("NCBI_API_KEY")
if api_key:
params["api_key"] = api_key
response = requests.get(f"{BASE}/esearch.fcgi", params=params, timeout=30)
response.raise_for_status()
time.sleep(0.35)
return response.json()["esearchresult"]["idlist"]
pmids = esearch("hypertension[mh] AND randomized controlled trial[pt] AND 2024:2026[dp]")
print(pmids)
バッチの場合、非常に長い PMID リストを URL に渡す代わりに、NCBI ヒストリーサーバーパラメーター(usehistory=y、WebEnv、query_key)を優先します。
各検索パスについて以下を記録します:
例:
| データベース | 検索日 | クエリ | フィルター | 結果 |
| --- | --- | --- | --- | ---: |
| PubMed | 2026-05-11 | `sickle cell disease[mh] AND CRISPR[tiab]` | 2020:2026[dp], English | 42 |
raise_for_status() を呼び出しているか、または 200 以外のレスポンスを処理しているか?