你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
FHIR 搜索概述
快速医疗保健互操作性资源 (FHIR) 规范定义了用于查询 FHIR 服务器数据库中资源的 API。 本文将指导你完成在 FHIR 中查询数据的关键方面。 有关 FHIR 搜索 API 的完整详细信息,请参阅 HL7 FHIR 搜索文档。
在本文中,我们使用占位符来表示 FHIR 服务器 URL 的示例 API 调用 {{FHIR_URL}}
演示 FHIR 搜索语法。 如果 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 | 评论 |
---|---|---|---|
数字 | 是 | 是 | |
date | 是 | 是 | |
string | 是 | 是 | |
token | 是 | 是 | |
reference | 是 | 是 | |
复合 | 部分 | 部分 | 本文中提供了支持的复合类型列表。 |
quantity | 是 | 是 | |
uri | 是 | 是 | |
特殊 | 否 | 否 |
通用搜索参数
存在适用于 FHIR 中的所有资源的通用搜索参数。 下面列出了这些项,并在 FHIR 服务中提供支持。
通用搜索参数 | Azure Health Data Services 中的 FHIR 服务 | 适用于 FHIR 的 Azure API | 评论 |
---|---|---|---|
_id |
是 | 是 | |
_lastUpdated |
是 | 是 | |
_tag |
是 | 是 | |
_type |
是 | 是 | |
_security |
是 | 是 | |
_profile |
是 | 是 | |
_has |
是 | 是 | |
_query |
否 | No | |
_filter |
No | No | |
_list |
No | No | |
_text |
No | No | |
_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 服务支持复合搜索的以下搜索参数类型配对。
- 引用、令牌
- 令牌、日期
- 令牌、数字、数字
- 令牌、数量
- 数字、字符串
- 令牌、令牌
有关详细信息,请参阅 HL7 组合搜索参数文档。
注意
根据 FHIR 规范,组合搜索参数不支持修饰符。
修饰符和前缀
修饰符支持使用其他条件限定搜索参数。 下面是 FHIR 修饰符及其在 FHIR 服务中的支持表。
修饰符 | Azure Health Data Services 中的 FHIR 服务 | 适用于 FHIR 的 Azure API | 评论 |
---|---|---|---|
:missing |
是 | 是 | |
:exact |
是 | 是 | |
:contains |
是 | 是 | |
:text |
是 | 是 | |
:type (引用) |
是 | 是 | |
:not |
是 | 是 | |
:below (uri) |
是 | 是 | |
:above (uri) |
是 | 是 | |
:in (标记) |
否 | 否 | |
:below (标记) |
否 | 否 | |
:above (标记) |
否 | 否 | |
: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 |
是 | 是 | |
_count |
是 | 是 | _count 仅限 1000 个资源。 如果设置为高于 1000,则只返回 1000,并且捆绑包中将包含警告。 |
_include |
是 | 是 | 使用 _include 检索的项上限为 100。 _include Azure Cosmos DB 上的 PaaS 和 OSS 不支持 :iterate (#2137)。 |
_revinclude |
是 | 是 | 使用 _revinclude 检索的项上限为 100。 _revinclude Azure Cosmos DB 上的 PaaS 和 OSS 不支持 :iterate (#2137)。 错误请求的状态代码也不正确: #1319。 |
_summary |
是 | 是 | |
_total |
部分 | 部分 | _total=none 和 _total=accurate |
_sort |
部分 | 部分 | sort=_lastUpdated 在 FHIR 服务上受支持。 对于 FHIR 服务和 OSS SQL DB FHIR 服务器,支持按字符串和 dateTime 字段排序。 对于在 2021 年 4 月 20 日之后创建的 Azure API for FHIR 和 OSS Azure Cosmos DB 数据库,支持对名字、姓氏、出生日期和临床日期进行排序。 |
_contained |
否 | No | |
_containedType |
No | No | |
_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 搜索示例页。
分页
如前所述,在捆绑包中 searchset
提供的链接处,FHIR 搜索的结果以分页形式提供。 默认情况下,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 涵盖两种不同的数据类型:年龄和范围;但是,Azure Health Data Services 中的 FHIR 服务支持 Range 上的这两个搜索参数,但不支持在 Age 上。
是否支持观测$lastn操作?
此操作不受支持。 替代方法是使用_count来限制每页返回的资源,_sort以降序提供结果。
后续步骤
现在,你已了解有关 FHIR 搜索的基本知识,请参阅搜索示例页,详细了解如何使用搜索参数、修饰符和其他 FHIR 搜索方法进行搜索。
注意
FHIR® 是 HL7 的注册商标,经 HL7 许可使用。