FHIR 検索の例
さまざまな検索パラメーター、修飾子、チェーン検索と逆チェーン検索、複合検索、 POST
検索要求などを特徴とする Fast Healthcare Interoperability Resources (FHIR®) 検索 API 呼び出しの例を次に示します。 FHIR 検索の概念の一般的な概要については、「FHIR Search の概要を参照してください。
検索結果のパラメーター
_include
_include
では、リソース インスタンスを検索し、ターゲット リソース インスタンスによって参照される他のリソースの結果に含めることができます。 たとえば、 _include
を使用して MedicationRequest
リソースを照会し、特定の患者の処方箋に検索を制限できます。 その後、FHIR サービスは、 MedicationRequest
リソースと参照される Patient
リソースを返します。 次の例では、要求によって、データベース内のすべての MedicationRequest
リソース インスタンスと、 MedicationRequest
インスタンスによって参照されるすべての患者がプルされます。
GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient
Note
Azure Health Data Services の FHIR サービスでは、 _include
と _revinclude
を使用して検索を制限し、最大 100 項目を返します。
_revinclude
_revinclude
では、リソース インスタンスを検索し、ターゲット リソース インスタンスを参照する他のリソースを結果に含めることができます。 たとえば、患者を検索し、逆に患者を参照するすべての出会いを含めることができます。
GET {{FHIR_URL}}/Patient?_revinclude=Encounter:subject
_elements
_elements
は、検索結果の情報を、リソースの種類に対して定義された要素のサブセットに絞り込みます。 _elements
パラメーターは、基本要素のコンマ区切りのリストを受け取ります。
GET {{FHIR_URL}}/Patient?_elements=identifier,active
上記の要求は、患者のバンドルを返します。 各エントリには、識別子と患者のアクティブな状態のみが含まれます。 応答のエントリには、リソースに定義されているすべての要素が含まれていないことを示すSUBSETTED
のmeta.tag
値が含まれています。
検索修飾子
:not
:not
を使用すると、特定の値を持たない要素を持つリソースを検索できます。 たとえば、女性ではない患者を検索できます。
GET {{FHIR_URL}}/Patient?gender:not=female
その代わりに、性別値が指定されていない患者を含め、gender
要素値がfemale
されていないすべてのPatient
リソースを取得します。 これは、指定された性別を持たない患者を無視するため、male
性別値を持つPatient
リソースを検索するのとは異なります。
:missing
:missing
は、 :missing=true
するときに、指定された要素の値を持たないすべてのリソースを返します。 さらに、:missing
:missing=false
すると、指定した要素を含むすべてのリソースが返されます。 単純なデータ型要素の場合、 :missing=true
要素が存在するが空の値を持つすべてのリソースで一致します。 たとえば、birthdate
に関する情報が不足しているすべてのPatient
リソースを検索する場合は、次の呼び出しを行うことができます。
GET {{FHIR_URL}}/Patient?birthdate:missing=true
:exact
:exact
は、 string
データ型を持つ要素を検索するために使用され、パラメーター値が要素値の大文字と小文字の完全な文字シーケンスと正確に一致する場合は正の値を返します。
GET {{FHIR_URL}}/Patient?name:exact=Jon
この要求は、Jon
のgiven
またはfamily
名を持つPatient
リソースを返します。 Jonathan
やJON
などの名前を持つ患者がいる場合、名前が指定された値と正確に一致しないため、検索はこれらのリソースを無視します。
:contains
:contains
は、 string
型要素のクエリに使用され、フィールド内の任意の場所で指定された値との一致を許可します。 contains
は大文字と小文字を区別せず、他の文字と連結された一致する文字列を認識します。 次に例を示します。
GET {{FHIR_URL}}/Patient?address:contains=Meadow
この要求は、文字列 "Meadow" を含むaddress
要素フィールドを持つすべてのPatient
リソースを返します (大文字と小文字は区別されません)。 つまり、正の一致を返す "メドウズ レーン"、"Pinemeadow Place"、"メドウラーク セント" などの値を持つアドレスを持つことができます。
チェーン検索
参照先リソースに含まれる要素を対象とする検索操作を実行するには、一連のパラメーターを .
と共に "チェーン" できます。 たとえば、name
で指定された患者へのsubject
参照を持つすべてのDiagnosticReport
リソースを表示する場合は、次のクエリを使用します。
GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah
この要求は、"Sarah" という名前の患者サブジェクトを持つすべての DiagnosticReport
リソースを返します。 .
は、チェーン検索を参照されているPatient
リソース内のname
要素にポイントします。
FHIR 検索のもう 1 つの一般的な用途は、特定の患者のすべての出会いを見つけることです。 特定のid
を持つPatient
を参照するEncounter
リソースを定期的に (チェーンされていない) 検索を実行するには、次のコマンドを使用します。
GET {{FHIR_URL}}/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
チェーン検索を使用すると、詳細が検索パラメーターと一致する患者を参照するすべての Encounter
リソースを検索できます。 次の例では、 birthdate
によって絞り込まれた患者を参照する出会いを検索する方法を示します。
GET {{FHIR_URL}}/Encounter?subject:Patient.birthdate=1987-02-20
これにより、指定したbirthdate
値を持つ患者を参照するすべてのEncounter
インスタンスが返されます。
さらに、 &
演算子を使用して複数のチェーン検索を開始できます。これにより、1 つの要求で複数の参照を検索できます。 &
の場合、チェーン検索は各要素値を "独立して" スキャンします。
GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA
これにより、generalPractitioner
として "Sarah" への参照を持つすべてのPatient
リソースと、ワシントン州の住所を持つgeneralPractitioner
への参照が返されます。 言い換えると、患者にニューヨーク州の Sarah という名前の generalPractitioner
があり、ワシントン州の Bill という名前の別の generalPractitioner
がある場合、両方とも、この検索を行うときに肯定的な一致の条件を満たします。
検索で、ペアの要素値を厳密にチェックする論理 AND 条件が必要なシナリオについては、次の サンプル検索 例を参照してください。
逆チェーン検索
FHIR で逆チェーン検索を使用すると、他のリソースによって参照されるターゲット リソース インスタンスを検索できます。 言い換えると、リソースを参照するリソースのプロパティに基づいてリソースを検索できます。 これは、 _has
パラメーターを使用して行います。 たとえば、Observation
リソースには、Patient
リソースへの参照をチェックする検索パラメーター patient
があります。 特定のcode
を持つObservation
によって参照されているすべてのPatient
リソースを検索するには、次のコードを使用します。
GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527
この要求は、コード 527
Observation
リソースによって参照されるPatient
リソースを返します。
さらに、逆チェーン検索は再帰的な構造を持つことができます。 たとえば、janedoe
という名前の特定の開業医からAuditEvent
によって観察が参照されるObservation
によって参照されているすべての患者を検索する場合は、次のコマンドを使用します。
GET {{FHIR_URL}}/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe
複合検索
論理的に接続されたペアとしてグループ化された要素を含むリソースを検索するために、FHIR は複合検索を定義し、単一のパラメーター値を $
演算子と結合して、接続されたパラメーターのペアを形成します。 複合検索では、要素値の積集合がペアの検索パラメーターに設定されているすべての条件を満たす場合に、正の一致が発生します。 次の例では、9.2
未満のカリウム値を含むすべてのDiagnosticReport
リソースに対してクエリを実行します。
GET {{FHIR_URL}}/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2
この場合のペア要素は、(result
として参照されるObservation
リソースからの) code
要素と、code
に接続されたvalue
要素になります。 $
演算子を使用してコードに従って、value
条件をlt
("より小さい" の場合) 9.2
(カリウム mmol/L 値の場合) として設定します。
複合検索パラメーターを使用して、論理 OR を使用して複数のコンポーネント コード値の数量をフィルター処理することもできます。 たとえば、拡張期血圧が 90 を超える、または systolic 血圧が 140 を超える観察を照会するには、次のようにします。
GET {{FHIR_URL}}/Observation?component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140
,
が 2 つの条件間の論理 OR 演算子として機能する方法に注意してください。
次のエントリ セットを表示する
検索クエリから一度に返すことができるリソースの最大数は 1000 です。 ただし、検索クエリに一致するリソース インスタンスが 1,000 を超える場合があり、最初の 1,000 エントリの後に次の結果セットを取得する必要があります。 この場合は、検索から返されたsearchset
バンドルの継続 (つまり、"next"
) トークンurl
値を使用します。
"resourceType": "Bundle",
"id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
"meta": {
"lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
},
"type": "searchset",
"link": [
{
"relation": "next",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
},
{
"relation": "self",
"url": "{{FHIR_URL}}/Patient?_sort=_lastUpdated"
}
],
指定した URL に対して GET
要求を行います。
GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd
これにより、検索結果の次のエントリ セットが返されます。 searchset
バンドルは検索結果エントリの完全なセットであり、継続トークン url
は FHIR サービスによって提供されるリンクであり、最初のサブセットに収まらないエントリを取得します (1 ページに返されるエントリの最大数に制限があるため)。
を使用して検索する POST
ここで説明するすべての検索例では、 GET
要求を使用します。 ただし、次のように、_search
パラメーターでPOST
を使用して FHIR 検索 API 呼び出しを行うこともできます。
POST {{FHIR_URL}}/Patient/_search?_id=45
この要求は、指定されたid
値を持つPatient
リソース インスタンスを返します。 GET
要求と同様に、サーバーは条件を満たすリソース インスタンスを決定し、HTTP 応答でバンドルを返します。
POST
で検索するもう 1 つの機能は、クエリ パラメーターをフォーム本文として送信できる点です。
POST {{FHIR_URL}}/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
次のステップ
この記事では、検索パラメーター、修飾子、およびその他のメソッドを使用して FHIR で検索する方法について説明しました。 FHIR 検索の詳細については、以下を参照してください。
Note
FHIR® は HL7 の登録商標であり、HL7 の許可を得て使用しています。