你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
重要
Azure API for FHIR 将于 2026 年 9 月 30 日停用。 按照迁移策略在该日期之前转换到 Azure Health Data Services FHIR® 服务。 由于 Azure API for FHIR 停用,从 2025 年 4 月 1 日开始,不允许使用新的客户部署。 Azure Health Data Services FHIR 服务是 Azure API for FHIR 的演化版本,可让客户管理 FHIR、DICOM 和医疗技术服务,并集成到其他 Azure 服务。
快速医疗保健互操作性资源 (FHIR®) 规范定义了搜索 FHIR 资源的基础。 本文将指导你完成在 FHIR 中搜索资源的一些关键方面。 有关搜索 FHIR 资源的完整详细信息,请参阅 HL7 FHIR 规范中的搜索。 在本文中,我们提供了搜索语法的示例。 每个搜索都针对 FHIR 服务器,该服务器通常具有 URL https://<FHIRSERVERNAME>.azurewebsites.net。 在此示例中,我们将占位符 {{FHIR_URL}} 用于此 URL。
FHIR 搜索可以面向特定资源类型、指定的隔离舱或所有资源。 在 FHIR 中执行搜索的最简单方法是使用 GET 请求。 例如,如果要拉取数据库中的所有患者,可以使用以下请求。
GET {{FHIR_URL}}/Patient
还可以使用 POST搜索,如果查询字符串很长,这非常有用。 使用 POST搜索时,搜索参数可以作为表单提交,从而实现更长、更复杂的查询参数系列,这些参数在查询字符串中可能难以看见和理解。
如果搜索请求成功,则会收到类型为 searchsetFHIR 捆绑包的响应。 如果搜索失败,可以在“搜索失败”中找到 OperationOutcome 错误详细信息,以帮助了解搜索失败的原因。
在以下部分中,我们将介绍搜索所涉及的方方面面。 查看完这些细节后,请参考我们的 示例页面 ,里面有你可以在 FHIR Azure API 中进行的搜索示例。
搜索参数
搜索基于资源的各种属性。 这些属性称为搜索参数。 每种资源都有一组定义的搜索参数。 必须在数据库中定义搜索参数并编制索引,方可成功搜索该参数。
每个搜索参数都有一个定义的数据类型。 下表概述了对各种数据类型的支持。
警告
在使用 _sort Azure API 进行 FHIR 链式搜索时出现了问题。 这个问题在后续版本中得到了解决。 有关详细信息,请参阅开源问题 #2344。
| 搜索参数类型 | 适用于 FHIR 的 Azure API | Azure Health Data Services 中的 FHIR 服务 | 评论 |
|---|---|---|---|
| 数字 | 是 | 是 | |
| date | 是 | 是 | |
| 字符串 | 是 | 是 | |
| 代币 | 是 | 是 | |
| 引用 | 是 | 是 | |
| 复合 | 部分 | 部分 | 本文稍后将介绍支持的复合类型列表。 |
| quantity | 是 | 是 | |
| uri | 是 | 是 | |
| 特殊 | 否 | 否 |
通用搜索参数
存在适用于所有资源的通用搜索参数。 这些参数列在以下列表中,并附带它们在 FHIR Azure API 中的支持。
| 通用搜索参数 | 适用于 FHIR 的 Azure API | Azure Health Data Services 中的 FHIR 服务 | 评论 |
|---|---|---|---|
| _id | 是 | 是 | |
| _lastUpdated | 是 | 是 | |
| _tag | 是 | 是 | |
| _type | 是 | 是 | |
| _security | 是 | 是 | |
| _profile | 是 | 是 | |
| _has | 部分 | 是 |
_has Azure API for FHIR 中的 MVP 支持以及 Azure Cosmos DB 支持的 OSS 版本。 以下链接部分包含更多详细信息。 |
| _query | 否 | 否 | |
| _filter | 否 | 否 | |
| _list | 否 | 否 | |
| _text | 否 | 否 | |
| _content | 否 | 否 |
特定于资源的参数
借助 Azure API for FHIR,我们可为 FHIR 规范定义的几乎所有特定于资源的搜索参数提供支持。 以下链接中提供了我们不支持的唯一搜索参数。
还可以使用以下请求查看 FHIR 功能语句中搜索参数的当前支持。
GET {{FHIR_URL}}/metadata
若要查看功能语句中的搜索参数,请导航到 CapabilityStatement.rest.resource.searchParam 查看每个资源的搜索参数,并 CapabilityStatement.rest.searchParam 查找所有资源的搜索参数。
注意
FHIR 的 Azure API 不会自动创建或索引任何未由 FHIR 规范定义的搜索参数。 但是,我们确实支持你定义自己的 搜索参数。
组合搜索参数
组合搜索允许搜索值对。 例如,如要搜索用户身高 60 英寸的身高观测值,则需要确保单一观测分量包含身高代码和值 60。 如果没有,你可能会看到60分,但身高不算。 比如,体重60,身高48。 这两个参数都满足搜索条件,但不在同一个字段中。
使用 Azure API for FHIR,我们支持以下搜索参数类型配对。
- 引用、令牌
- 令牌、日期
- 令牌、数字、数字
- 令牌、数量
- 数字、字符串
- 令牌、令牌
有关详细信息,请参阅 HL7 组合搜索参数。
注意
根据FHIR规范,复合搜索参数不支持修饰符。
修饰符和前缀
修饰符允许修改搜索参数。 下表概述了 Azure API for FHIR 中的所有 FHIR 修饰符及其支持。
| 修饰符 | 适用于 FHIR 的 Azure API | Azure Health Data Services 中的 FHIR 服务 | 评论 |
|---|---|---|---|
| :missing | 是 | 是 | |
| :exact | 是 | 是 | |
| :contains | 是 | 是 | |
| :text | 是 | 是 | |
| :类型(参考) | 是 | 是 | |
| :not | 是 | 是 | |
| :下图(URI) | 是 | 是 | |
| :上文(URI) | 是 | 是 | |
| :in(标记) | 否 | 否 | |
| :以下(标记) | 否 | 否 | |
| :above(标记) | 否 | 否 | |
| :not-in(标记) | 否 | 否 |
对于具有特定顺序的搜索参数(数字、日期和数量),可以使用参数上的前缀来帮助查找匹配项。 Azure API for FHIR 支持所有前缀。
搜索结果参数
为了帮助管理返回的资源,可以使用搜索结果参数。 有关如何使用每个搜索结果参数的详细信息,请参阅 HL7 网站。
| 搜索结果参数 | 适用于 FHIR 的 Azure API | Azure Health Data Services 中的 FHIR 服务 | 评论 |
|---|---|---|---|
| _elements | 是 | 是 | |
| _计数 | 是 | 是 | _count限制为1000个资源。 如果设置高于1000,则只返回1000个,并在捆绑包中返回警告。 |
| _include | 是 | 是 | 包含的项仅限 100 个。 PaaS 上的 _include 和 Azure Cosmos DB 上的 OSS 不包括 :iterate 支持 (#2137)。 |
| _revinclude | 是 | 是 | 包含的项仅限 100 个。 PaaS 上的 _revinclude 和 Azure Cosmos DB 上的 OSS 不包括 :iterate 支持 (#2137)。 错误的请求 #1319 还包含错误的状态代码 |
| _summary | 是 | 是 | |
| _total | 部分 | 部分 | _total=none 和 _total=accurate |
| _sort | 部分 | 部分 | Azure API for FHIR 和 FHIR 服务上支持 sort=_lastUpdated。 对于2021年4月20日以后创建的Azure API for FHIR和OSS Azure Cosmos数据库数据库,支持按名字、姓氏、出生日期和临床日期排序。 |
| _contained | 否 | 否 | |
| _containedType | 否 | 否 | |
| _score | 否 | 否 |
注意
默认情况下,_sort 按升序对记录进行排序。 可以使用前缀 '-' 来按降序排序。 此外,FHIR 服务和 Azure API for FHIR 仅允许你一次对单个字段进行排序。
默认情况下,Azure API for FHIR 设置为宽松处理。 这意味着服务器忽略任何未知或不支持的参数。 如想使用严格处理,可以使用首选标头并设置 handling=strict。
链接搜索和反向链接搜索
链接搜索允许使用搜索参数在其他资源引用的资源上执行搜索。 例如,如果要查找患者名为 Jane 的情况,请使用:
GET {{FHIR_URL}}/Encounter?subject:Patient.name=Jane。
同样地,可以执行反向链接搜索。 如此一来便可获取一些资源,你可以在其中对其他引用这些资源的资源指定条件。 有关链接搜索和反向链接搜索的更多示例,请参阅 FHIR 搜索示例页。
注意
在FHIR的Azure API和由Azure Cosmos DB支持的开源中,有一个限制,链式和反向链式搜索所需的每个子查询只能返回1000条项。 如果找到超过 1,000 条,您将收到以下错误提示:“链式表达式中的子查询不能返回超过 1,000 条结果,请使用更具选择性的标准。”一个成功的查询需要明确说明你在寻找什么。
分页
如前所述,来自搜索的结果是分页捆绑包。 默认情况下,搜索每页返回10个结果,可以通过指定 _count来增加(或减少)这个数字。 捆绑包中存在一个包含当前搜索结果的自链接。 如果有其他匹配,捆绑包中将包含下一个链接。 你可以继续使用“下一页”链接来获取后续的结果页面。
_count 限制为 1,000 个项目或更少。
捆绑包中的下一个链接的延续令牌大小限制为 3 KB。 可以使用标头 x-ms-documentdb-responsecontinuationtokenlimitinkb灵活调整 1 KB 到 3 KB 之间的继续标记大小。
目前,Azure API for FHIR 仅支持捆绑包中有“下一页”链接,不支持“第一页”、“最后一页”或“上一页”链接。
后续步骤
了解搜索基础知识后,请参阅搜索示例页,详细了解如何使用不同的搜索参数、修饰符和其他 FHIR 搜索方案进行搜索。
注意
FHIR® 是 HL7 的注册商标,经 HL7 许可使用。