FHIR 搜尋概觀
Fast Healthcare 互操作性資源 (FHIR) 規格會定義 API 來查詢 FHIR® 伺服器資料庫中的資源。 本文會引導您完成在 FHIR 中查詢數據的重要層面。 如需 FHIR 搜尋 API 的完整詳細數據,請參閱 HL7 FHIR 搜尋 檔。
在本文中,我們會在 API 呼叫範例中示範 FHIR 搜尋語法, {{FHIR_URL}}
並搭配 佔位符來表示 FHIR 伺服器 URL。 如果 FHIR 服務位於 Azure Health Data Services 中,此 URL 會是 https://<WORKSPACE-NAME>-<FHIR-SERVICE-NAME>.fhir.azurehealthcareapis.com
。
FHIR 搜尋可以針對特定資源類型、指定的區間或 FHIR 伺服器資料庫中的所有資源。 在 FHIR 中執行搜尋的最簡單方式是使用 GET
要求。 例如,如果您想要提取資料庫中的所有 Patient
資源,您可以使用下列要求。
GET {{FHIR_URL}}/Patient
您也可以使用 POST
來搜尋 。 若要使用 POST
進行搜尋,則會在要求的主體中傳遞搜尋參數。 這可讓您更輕鬆地使用較長且更複雜的參數系列來傳送查詢。
POST
使用 或 GET
,如果搜尋要求成功,您會收到 FHIR searchset
套件組合,其中包含從搜尋傳回的資源實例。 如果搜尋失敗,您會在回應中找到 OperationOutcome
錯誤詳細數據。
在下列各節中,我們將討論在 FHIR 中查詢資源的各種層面。 檢閱這些主題之後,請參閱 FHIR 搜尋範例頁面,其中包含不同 FHIR 搜尋方法的範例。
搜尋參數
當您在 FHIR 中搜尋時,您要搜尋資料庫以尋找符合特定準則的資源。 FHIR API 會指定一組豐富的搜尋參數,以便微調搜尋準則。 FHIR 中的每個資源都會以一組元素的形式傳遞資訊,而搜尋參數會運作以查詢這些項目中的資訊。 在 FHIR 搜尋 API 呼叫中,如果在要求搜尋參數與資源實例中儲存的對應元素值之間建立正比對,則 FHIR 伺服器會傳回包含符合搜尋準則之資源實例的資源實例套例套件組合。
針對每個搜尋參數,FHIR 規格會 定義可使用的數據類型 。 以下概述各種數據類型的 FHIR 服務支援。
搜尋參數類型 | Azure Health Data Services 中的 FHIR 服務 | 適用於 FHIR 的 Azure API | 註解 |
---|---|---|---|
數值 | Yes | Yes | |
date | Yes | Yes | |
字串 | Yes | Yes | |
token | Yes | Yes | |
參考 | Yes | Yes | |
複合 | Partial | Partial | 本文會遵循支持的複合類型清單。 |
數量 | Yes | Yes | |
uri | Yes | Yes | |
特殊 | No | No |
常見的搜尋參數
FHIR 中適用於所有資源的常見搜尋參數 。 這些清單如下,以及其在 FHIR 服務中的支援。
一般搜尋參數 | Azure Health Data Services 中的 FHIR 服務 | 適用於 FHIR 的 Azure API | 註解 |
---|---|---|---|
_id |
Yes | .是 | |
_lastUpdated |
.是 | .是 | |
_tag |
.是 | .是 | |
_type |
.是 | .是 | |
_security |
.是 | .是 | |
_profile |
.是 | .是 | |
_has |
.是 | 是 | |
_query |
無 | 無 | |
_filter |
無 | 無 | |
_list |
無 | 無 | |
_text |
無 | 無 | |
_content |
無 | No |
資源特定參數
Azure Health Data Services 中的 FHIR 服務支援 FHIR 規格中定義的所有 資源特定搜尋參數 。 不支援的搜尋參數會列在下列連結中:
您也可以使用下列要求,在 FHIR 功能語句中看到搜尋參數的目前支援:
GET {{FHIR_URL}}/metadata
若要在功能語句中檢視支援的搜尋參數,請流覽至 CapabilityStatement.rest.resource.searchParam
以取得資源特定的搜尋參數,以及 CapabilityStatement.rest.searchParam
套用至所有資源的搜尋參數。
注意
Azure Health Data Services 中的 FHIR 服務不會自動為基底 FHIR 規格中未定義的搜尋參數編製索引。 FHIR 服務支援 自定義搜尋參數。
複合搜尋參數
FHIR 中的複合搜尋可讓您以邏輯方式連接的單位來搜尋元素組。 例如,如果您要搜尋患者高度超過60英吋的觀察,則您想要確定觀察的單一屬性包含高度代碼 和 大於60英吋的值(值應該只與高度有關)。 例如,您不希望在高度代碼 和 超過 60 英吋的手臂長度代碼的觀察上取得正比對。 復合搜尋參數會藉由搜尋預先指定的元素組來防止此問題,其值必須同時符合搜尋準則,才能發生正比對。
Azure Health Data Services 中的 FHIR 服務支援下列複合搜尋的搜尋的搜尋參數類型配對。
- 參考、令牌
- Token、Date
- Token、Number、Number
- Token、Quantity
- Token、String
- 令牌、令牌
如需詳細資訊,請參閱 HL7 複合搜尋參數 檔。
注意
根據 FHIR 規格,複合搜尋參數不支援修飾詞。
修飾詞和前置詞
修飾詞 可讓您使用其他條件來限定搜尋參數。 以下是 FHIR 修飾詞及其在 FHIR 服務中的支援表格。
修飾詞 | Azure Health Data Services 中的 FHIR 服務 | 適用於 FHIR 的 Azure API | 註解 |
---|---|---|---|
:missing |
Yes | .是 | |
:exact |
.是 | .是 | |
:contains |
.是 | .是 | |
:text |
.是 | Yes | |
:type (參考) |
Yes | .是 | |
:not |
.是 | Yes | |
:below (uri) |
Yes | Yes | |
:above (uri) |
Yes | Yes | |
:in (令牌) |
No | No | |
:below (令牌) |
No | No | |
:above (令牌) |
No | No | |
:not-in (令牌) |
No | 無 | |
:identifier |
無 | No |
對於具有特定訂單(數位、日期和數量)的搜尋參數,您可以在參數值之前使用 前置詞 來精簡搜尋準則(例如, Patient?_lastUpdated=gt2022-08-01
前置 gt
詞表示「大於」)。 Azure Health Data Services 中的 FHIR 服務支援 FHIR 標準中定義的所有前置詞。
搜尋結果參數
FHIR 指定一組搜尋結果參數,以協助管理從搜尋傳回的資訊。 如需如何在 FHIR 中使用搜尋結果參數的詳細資訊,請參閱 HL7 網站。 以下是 FHIR 搜尋結果參數及其在 FHIR 服務中的支援表格。
搜尋結果參數 | Azure Health Data Services 中的 FHIR 服務 | 適用於 FHIR 的 Azure API | 註解 |
---|---|---|---|
_elements |
Yes | .是 | |
_count |
.是 | Yes | _count 限制為1000個資源。 如果設定高於 1000,則只會傳回 1000,而且套件組合中將會包含警告。 |
_include |
Yes | Yes | 使用 _include 擷取的專案限制為100。 _include 在 Azure Cosmos DB 上的 PaaS 和 OSS 不支援 :iterate (#2137) 。 |
_revinclude |
Yes | Yes | 使用 _revinclude 擷取的專案限制為100。 _revinclude 在 Azure Cosmos DB 上的 PaaS 和 OSS 不支援 :iterate (#2137) 。 不正確的要求也有不正確的狀態代碼: #1319。 |
_summary |
Yes | Yes | |
_total |
Partial | Partial | _total=none 和 _total=accurate |
_sort |
Partial | Partial | sort=_lastUpdated FHIR 服務支援。 針對 FHIR 服務和 OSS SQL DB FHIR 伺服器,支援依字串和 dateTime 字段排序。 針對在 2021 年 4 月 20 日之後建立的 Azure API for FHIR 和 OSS Azure Cosmos DB 資料庫,支援名字、姓氏、出生日期和臨床日期排序。 |
_contained |
No | 無 | |
_containedType |
無 | 無 | |
_score |
無 | No |
注意:
- 根據預設,
_sort
會依遞增順序排列記錄。 您也可以使用前置-
詞,以遞減順序排序。 FHIR 服務一次只允許您排序單一欄位。 - FHIR 服務支援使用 revinclude 的通配符搜尋。 在 revinclude 查詢中新增 「.」 查詢參數會指示 FHIR 服務參考對應至來源資源的所有資源。
根據預設,Azure Health Data Services 中的 FHIR 服務會設定為寬大處理。 這表示伺服器會忽略任何未知或不支持的參數。 如果您要使用嚴格的處理,可以包含 Prefer
標頭並設定 handling=strict
。
鏈結和反向鏈結搜尋
鏈結搜尋可讓您針對具有另一個資源參考的資源執行精細目標查詢。 例如,如果您想要尋找患者名稱為 Jane 的遭遇,請使用:
GET {{FHIR_URL}}/Encounter?subject:Patient.name=Jane
.
在上述要求中,會將鏈結搜尋的路徑導向至目標參數 (name
在此案例中為 )。
同樣地,您可以使用 參數執行反向鏈結搜尋 _has
。 這可讓您藉由指定參考感興趣資源之其他資源的準則來擷取資源實例。 如需鏈結和反向鏈結搜尋的範例,請參閱 FHIR 搜尋範例 頁面。
分頁
如先前所述,FHIR 搜尋的結果可在套件組合中 searchset
提供的連結以編頁形式取得。 根據預設,FHIR 服務會依頁面顯示 10 個搜尋結果,但您可以藉由設定 _count
參數來增加(或減少)。 如果比單一頁面上的相符專案還多,套件組合會包含 next
連結。 重複從 next
連結擷取會產生後續的結果頁面。 請注意, _count
參數值不能超過 1000。
目前,Azure Health Data Services 中的 FHIR 服務僅支持 next
連結,而且不支援 first
從搜尋傳回之套件組合中的、 last
或 previous
連結。
常見問題集
R4 不支援的搜尋參數中的「部分支援」是什麼意思?
某些資源特定的搜尋參數涵蓋多個數據類型,而 Azure Health Data Services 中的 FHIR 服務可能只支援其中一個數據類型上的搜尋參數。 例如,Condition-abatement-age 和 Condition-onset-age 涵蓋兩種不同的數據類型:Age 和 Range;不過,Azure Health Data Services 中的 FHIR 服務支援 Range 上的這兩個搜尋參數,但不支援 Age。
是否支持觀察$lastn作業?
不支援此連結方式。 替代方法是使用_count來限制每個頁面傳回的資源,並_sort以遞減順序提供結果。
下一步
既然您已瞭解 FHIR 搜尋的基本概念,請參閱搜尋範例頁面,以取得如何使用搜尋參數、修飾詞和其他 FHIR 搜尋方法進行搜尋的詳細數據。
注意
FHIR® 是 HL7 的註冊商標,在 HL7 的許可下使用。