共用方式為


FHIR 搜尋範例

以下是快速醫療保健互操作性資源 (FHIR®) 搜尋 API 呼叫的範例,其中包含各種搜尋參數、修飾詞、鏈結和反向鏈結搜尋、復合搜尋、搜尋、 POST 搜尋要求等等。 如需 FHIR 搜尋概念的一般簡介,請參閱 FHIR 搜尋概觀。

搜尋結果參數

_include

_include 可讓您搜尋資源實例,並包含在目標資源實例所參考的其他資源結果中。 例如,您可以使用 _include 來查詢 MedicationRequest 資源,並將搜尋限制為特定病患的處方。 FHIR 服務接著會傳回 MedicationRequest 資源和參考 Patient 的資源。 在下列範例中,要求會提取資料庫中的所有 MedicationRequest 資源實例,以及 實例所參考 MedicationRequest 的所有病患。

 GET {{FHIR_URL}}/MedicationRequest?_include=MedicationRequest:patient

注意

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

上述要求會傳回一組患者。 每個專案只包含標識碼和病患的作用中狀態。 回應中的專案包含 meta.tagSUBSETTED ,指出不包含為資源定義的所有專案。

搜尋修飾詞

:not

:not 可讓您使用沒有指定值的項目來尋找資源。 例如,您可以搜尋非女性的患者。

GET {{FHIR_URL}}/Patient?gender:not=female

在傳回中,您會取得元素gender值不是 female的所有Patient資源,包括未指定性別值的任何患者。 這與搜尋 Patient 具有性別值的資源 male 不同,因為這會忽略沒有指定性別的患者。

: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

此要求會傳 Patient 回具有 givenfamily 名稱 Jon的資源。 如果有名稱為 或JONJonathan病患,搜尋會忽略這些資源,因為其名稱與指定的值不完全相符。

:contains

:contains 是用來查詢 string 類型專案,並允許與欄位內任何位置的指定值相符。 contains 不區分大小寫,並辨識與其他字串連的相符字串。 例如:

GET {{FHIR_URL}}/Patient?address:contains=Meadow

此要求會傳回包含address字串 「Meadow」 之元素欄位的所有Patient資源(不區分大小寫)。 這表示您可以有值位址,例如傳回正比對的 “Meadows Lane”、“Pinemeadow Place” 或 “Meadowlark St”。

若要執行涵蓋參考資源內所含元素的搜尋作業,您可以「鏈結」一系列參數與 .。 例如,如果您想要檢視具有 subjectname指定病患參考的所有DiagnosticReport資源,請使用下列查詢。

 GET {{FHIR_URL}}/DiagnosticReport?subject:Patient.name=Sarah

此要求會傳回具有名為 「Sarah」 之病患主體的所有 DiagnosticReport 資源。 會將 . 鏈結搜尋指向 name 所參考 Patient 資源內的專案。

FHIR 搜尋的另一個常見用法是尋找特定患者的所有遭遇。 若要執行一般(非鏈結)搜尋 Encounter 參考 Patient 具有指定 id 用途的資源,請使用下列專案。

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實例。

此外,您可以使用 運算符起始多個鏈結搜尋 & ,以允許在一個要求中搜尋多個參考。 如果是 , &鏈結搜尋會「獨立」掃描每個元素值。

GET {{FHIR_URL}}/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA

這會傳回具有 「Sarah」 參考的所有 Patient 資源, generalPractitioner 以及具有華盛頓州地址的 參考 generalPractitioner 。 換句話說,如果一位病人有 generalPractitioner 來自紐約州的莎拉和來自華盛頓州的另一位 generalPractitioner 名叫比爾的病人,那麼在進行這次搜索時,兩人都會符合積極匹配的條件。

對於搜尋需要嚴格檢查配對專案值的邏輯 AND 條件的案例,請參閱下列 複合搜尋 範例。

在 FHIR 中使用反向鏈結搜尋可讓您搜尋其他資源所參考的目標資源實例。 換句話說,您可以根據參考資源的資源屬性來搜尋資源。 這是使用 參數完成的 _has 。 例如, Observation 資源具有搜尋參數 patient ,可檢查資源的參考 Patient 。 若要尋找 使用特定 codeObservation參考的所有Patient資源,請使用下列程序代碼。

GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527

此要求會Patient傳回使用程式代碼527的資源所Observation參考的資源。

此外,反向鏈結搜尋可以有遞歸結構。 例如,如果您想要搜尋所參考 Observation 的所有患者,其中觀察是由 AuditEvent 名為 的特定從業者 janedoe參考的 ,請使用:

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

在此情況下,配對的專案會是 code 專案(來自 Observation 參考為 result的資源),以及 value 與連接的專案 code。 在具有運算子的程式 $ 代碼之後,將 value 條件設定為 lt (針對 “less than”) 9.2 (針對鉀 mmol/L 值)。

複合搜尋參數也可用來使用邏輯 OR 來篩選多個元件程式代碼值數量。 例如,若要查詢具有大於90或收縮血壓大於140的觀察:

GET {{FHIR_URL}}/Observation?component-code-value-quantity=http://loinc.org|8462-4$gt90,http://loinc.org|8480-6$gt140

請注意,如何在 , 兩個條件之間做為邏輯 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"
        }
    ],

您會對提供的網址提出 GET 要求:

GET {{FHIR_URL}}/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd

這會傳回搜尋結果的下一組專案。 套件 searchset 組合是一組完整的搜尋結果專案,而接續令牌 url 是 FHIR 服務提供的連結,用來擷取不符合第一個子集的專案(因為限制為一頁傳回的最大項目數目)。

使用 搜尋 POST

這裡提及的所有搜尋範例都會使用 GET 要求。 不過,您也可以使用 POST 搭配 _search 參數進行 FHIR 搜尋 API 呼叫,如下所示。

POST {{FHIR_URL}}/Patient/_search?_id=45

此要求會 Patient 傳回具有指定 id 值的資源實例。 如同 GET 要求,伺服器會決定哪些資源實例符合條件,並在 HTTP 回應中傳回套件組合。

搜尋的另 POST 一個功能是,它可讓您將查詢參數提交為窗體主體。

POST {{FHIR_URL}}/Patient/_search
content-type: application/x-www-form-urlencoded

name=John

下一步

在本文中,您已瞭解如何使用搜尋參數、修飾詞和其他方法在 FHIR 中搜尋。 如需 FHIR 搜尋的詳細資訊,請參閱

注意

FHIR® 是 HL7 的註冊商標,在 HL7 的許可下使用。