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.tag
值 SUBSETTED
,指出不包含為資源定義的所有專案。
搜尋修飾詞
: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
回具有 given
或 family
名稱 Jon
的資源。 如果有名稱為 或JON
的Jonathan
病患,搜尋會忽略這些資源,因為其名稱與指定的值不完全相符。
:contains
:contains
是用來查詢 string
類型專案,並允許與欄位內任何位置的指定值相符。 contains
不區分大小寫,並辨識與其他字串連的相符字串。 例如:
GET {{FHIR_URL}}/Patient?address:contains=Meadow
此要求會傳回包含address
字串 「Meadow」 之元素欄位的所有Patient
資源(不區分大小寫)。 這表示您可以有值位址,例如傳回正比對的 “Meadows Lane”、“Pinemeadow Place” 或 “Meadowlark St”。
鏈結搜尋
若要執行涵蓋參考資源內所含元素的搜尋作業,您可以「鏈結」一系列參數與 .
。 例如,如果您想要檢視具有 subject
所name
指定病患參考的所有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
。 若要尋找 使用特定 code
所Observation
參考的所有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 的許可下使用。