適用于 Azure API for FHIR 的 FHIR 搜尋範例

以下是使用 Fast Healthcare 互通性資源 (FHIR®) 搜尋作業的一些範例,包括搜尋參數和修飾詞、鏈結和反向鏈結搜尋、複合搜尋、檢視搜尋結果的下一個專案 POST 集,以及使用要求進行搜尋。 如需搜尋的詳細資訊,請參閱 FHIR 搜尋概觀

搜尋結果參數

_包括

_include 會跨資源搜尋包含資源指定參數的資源。 例如,您可以跨 MedicationRequest 資源搜尋,只尋找包含特定病患之疾病相關資訊的專案,也就是 reference 參數 patient 。 在下列範例中,這會提取 從 MedicationRequests 參考的所有 MedicationRequests 和所有病患:

 GET [your-fhir-server]/MedicationRequest?_include=MedicationRequest:patient

注意

_include_revinclude 限制為 100 個專案。

_revinclude

_revinclude 可讓您以 相反的方向 _include 搜尋 。 例如,您可以搜尋病患,然後反向包含參考病患的所有發現:

GET [your-fhir-server]/Patient?_revinclude=Encounter:subject

_元素

_elements 將搜尋結果縮小為欄位的子集,以省略不必要的資料來減少回應大小。 參數接受以逗號分隔的基底元素清單:

GET [your-fhir-server]/Patient?_elements=identifier,active

在此要求中,您將傳回一組病患,但每個資源只會包含識別碼 () 和病患的作用中狀態。 此傳迴響應中的資源會包含 meta.tag 的值 SUBSETTED ,指出它們是不完整的結果集。

搜尋修飾詞

:不

:not 可讓您尋找屬性不是 true 的資源。 例如,您可以搜尋性別不是女性的病患:

GET [your-fhir-server]/Patient?gender:not=female

做為傳回值,您會取得性別不是女性的所有病患專案,包括空白值 (未指定性別的專案) 。 這與搜尋性別為男性的病患不同,因為這不會包含沒有特定性別的專案。

:失蹤

:missing 傳回當值為 時,沒有指定專案值 true 的所有資源,並在值為 false 時傳回包含指定專案的所有資源。 對於簡單的資料類型元素, :missing=true 將會比對元素具有延伸模組但具有空白值的所有資源。 例如,如果您想要尋找在生日上遺漏資訊的所有 Patient 資源,您可以執行下列動作:

GET [your-fhir-server]/Patient?birthdate:missing=true

:確切

:exact 用於 string 參數,並傳回精確比對參數的結果,例如大小寫和字串連。

GET [your-fhir-server]/Patient?name:exact=Jon

此要求會傳 Patient 回名稱與 Jon 完全相同的資源。 如果資源具有名稱為 或 joNJonathan 病患,搜尋會忽略並略過資源,因為它不符合指定的值。

:包含

:contains 用於 string 參數,並搜尋具有所搜尋欄位內字串中指定值部分相符專案的資源。 contains 不區分大小寫,並允許字串連。 例如:

GET [your-fhir-server]/Patient?address:contains=Meadow

此要求會傳 addressPatient 所有具有包含字串 「Meadow」 值之欄位的資源。 這表示您可以有位址,其中包含以搜尋結果傳回的值,例如 「Meadowers」 或 「59 Meadow ST」。

若要執行涵蓋多個參考參數的一系列搜尋作業,您可以使用句號 . 將參考參數一個附加至伺服器要求,以「鏈結」一連串的參考參數。 例如,如果您想要檢視具有包含特定 name 之資源的參考 Patient 的所有 DiagnosticReport 資源 subject

 GET [your-fhir-server]/DiagnosticReport?subject:Patient.name=Sarah

此要求會傳回具有名為 「Sarah」 病患主體的所有 DiagnosticReport 資源。 欄位 Patient 之後的句點 . 會在 參數的 subject reference 參數上執行鏈結搜尋。

一般搜尋 (不是鏈結搜尋) 的另一個常見用法,就是尋找特定病患的所有發現。 Patient通常會有一或多個 Encounter 具有主旨的 。 若要搜尋具有所提供 id 之 的所有 Encounter 資源 Patient

GET [your-fhir-server]/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f

使用鏈結搜尋,您可以找到符合特定資訊片段 Patient 的所有 Encounter 資源,例如 birthdate

GET [your-fhir-server]/Encounter?subject:Patient.birthdate=1987-02-20

這不只 Encounter 允許搜尋單一病患的資源,還允許所有具有指定生日值的病患。

此外,鏈結搜尋可以使用 符號 & 在一個要求中多次完成,這可讓您在一個要求中搜尋多個條件。 在這種情況下,鏈結搜尋「獨立」會搜尋每個參數,而不是搜尋只同時滿足所有條件的條件:

GET [your-fhir-server]/Patient?general-practitioner:Practitioner.name=Sarah&general-practitioner:Practitioner.address-state=WA

這會傳回具有 「Sarah」 做為 generalPractitioner 的所有 Patient 資源,而且具有 generalPractitioner 具有狀態 WA 之位址的 。 換句話說,如果病患有來自 NY 州 Sarah,而來自州 WA 的 Bill 兩者都參考為病患的 generalPractitioner ,則會傳回 。

如需搜尋必須是 AND 涵蓋所有條件為群組之作業的案例,請參閱下列 複合搜尋 範例。

鏈結搜尋可讓您根據資源參考的屬性來搜尋資源。 使用反向鏈結搜尋,可讓您以另一種方式執行。 您可以使用 參數,根據參考資源 _has 的屬性來搜尋資源。 例如, Observation 資源具有參考病患資源的搜尋參數 patient 。 若要尋找使用特定 code 參考 Observation 的所有病患資源:

GET [base]/Patient?_has:Observation:patient:code=527

此要求會傳回程序代碼 527Observation 參考的病患資源。

此外,反向鏈結搜尋可以有遞迴結構。 例如,如果您想要搜尋觀察具有特定使用者 janedoe 稽核事件的所有病患 Observation ,您可以執行下列動作:

GET [base]/Patient?_has:Observation:patient:_has:AuditEvent:entity:agent:Practitioner.name=janedoe

注意

在 Azure API for FHIR 和 Azure Cosmos DB 支援的開放原始碼 FHIR 伺服器中,鏈結的搜尋和反向鏈結搜尋是 MVP 實作。 為了在 Azure Cosmos DB 上完成鏈結搜尋,實作會逐步解說搜尋運算式,併發出子查詢來解決相符的資源。 這會針對運算式的每個層級執行。 如果有任何查詢傳回超過 100 個結果,將會擲回錯誤。

若要一次搜尋符合多個條件的資源,請使用複合搜尋,將單一參數值序列與符號 $ 聯結在一起。 傳回的結果會是符合聯結搜尋參數所指定之所有條件的資源交集。 這類搜尋參數稱為複合式搜尋參數,並定義結合巢狀結構中多個參數的新參數。 例如,如果您想要尋找包含 Observation 小於或等於 9.2 之含有之資源的所有 DiagnosticReport 資源:

GET [your-fhir-server]/DiagnosticReport?result.code-value-quantity=2823-3$lt9.2

此要求會指定包含 的程式碼的 2823-3 元件,在此案例中會是一個規則。 $在符號之後,它會指定元件值的範圍,其使用 lt 「less than or equal to」 和 9.2 forthe值範圍。

搜尋下一個專案集

每個單一搜尋查詢可傳回的專案數目上限為 1000。 不過,您可能有超過 1000 個專案符合搜尋查詢,而且您可能會想要在傳回的前 1000 個專案之後看到下一組專案。 在這種情況下,您會使用 中的 searchset 接續權杖 url 值,如下列結果所示 Bundle

    "resourceType": "Bundle",
    "id": "98731cb7-3a39-46f3-8a72-afe945741bd9",
    "meta": {
        "lastUpdated": "2021-04-22T09:58:16.7823171+00:00"
    },
    "type": "searchset",
    "link": [
        {
            "relation": "next",
            "url": "[your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd"
        },
        {
            "relation": "self",
            "url": "[your-fhir-server]/Patient?_sort=_lastUpdated"
        }
    ],

而且您會針對欄位 relation: next 底下的所提供 URL 執行 GET 要求:

GET [your-fhir-server]/Patient?_sort=_lastUpdated&ct=WzUxMDAxNzc1NzgzODc5MjAwODBd

這會傳回搜尋結果的下一組專案。 searchset是一組完整的搜尋結果專案,而接續權杖 url 是由伺服器提供的連結,可供您擷取第一個集合上未顯示的專案,因為搜尋查詢所傳回專案數目上限的限制。

使用 POST 搜尋

上述所有搜尋範例都已使用 GET 要求。 您也可以使用 使用 POST_search 來執行搜尋作業:

POST [your-fhir-server]/Patient/_search?_id=45

此要求會傳回值為 45 的所有 Patient 資源 id 。 就像在 GET 要求中一樣,伺服器會決定哪一組資源符合條件 () ,並在 HTTP 回應中傳回套件組合資源。

使用 POST 搜尋的另一個範例,其中查詢參數會提交為表單本文:

POST [your-fhir-server]/Patient/_search
content-type: application/x-www-form-urlencoded

name=John

下一步

在本文中,您已瞭解如何使用不同的搜尋參數、修飾詞和 FHIR 搜尋工具進行搜尋。 如需 FHIR 搜尋的詳細資訊,請參閱

FHIR® 是 HL7 的注冊商標,可與 HL7 的許可權搭配使用。