你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure API for FHIR 的 FHIR 搜索示例
重要
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®)搜索操作的示例,包括搜索参数和修饰符、链和反向链搜索、复合搜索、查看搜索结果的下一个 POST
条目集以及使用请求进行搜索。 有关搜索的详细信息,请参阅 FHIR 搜索概述。
搜索结果参数
_include
_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
_elements
将搜索结果缩小为字段子集,通过省略不必要的数据来减小响应大小。 该参数接受以逗号分隔的基元素列表。
GET [your-fhir-server]/Patient?_elements=identifier,active
在此请求中,你将获得一组患者,其中每个资源仅包括标识符和患者的活动状态。 此响应中的资源包含一个 meta.tag
值 SUBSETTED
,指示它们是一组不完整的结果。
搜索修饰符
:not
:not
允许查找属性不为 true 的资源。 例如,可以搜索性别不是女性的患者。
GET [your-fhir-server]/Patient?gender:not=female
在返回值中你将获得性别不是女性的所有患者条目,包括空值(未指定性别的条目)。 这与搜索性别为男性的患者不同,因为这样不会包括没有特定性别的条目。
:missing
当值为 true
时,:missing
会返回没有指定元素值的所有资源,并且当值为 false
时,它会返回包含指定元素 的所有资源。 对于简单的数据类型元素, :missing=true
匹配元素包含扩展但具有空值的所有资源。 以下示例演示如何查找在出生日期上缺少信息的所有 Patient
资源。
GET [your-fhir-server]/Patient?birthdate:missing=true
:exact
:exact
用于 string
参数,并返回与参数精确匹配的结果,例如大小和字符串联。
GET [your-fhir-server]/Patient?name:exact=Jon
此请求返回名称与 Jon
完全相同的 Patient
资源。 如果资源中的患者名称为 Jonathan
或 joN
,则搜索将忽略并跳过该资源,因为它与指定的值不完全匹配。
:contains
:contains
用于 string
参数,并搜索与所搜索字段的字符串中指定值部分匹配的资源。 contains
不区分大小写,允许字符串联。 例如:
GET [your-fhir-server]/Patient?address:contains=Meadow
此请求将返回具有address
包含字符串“Meadow”的值的所有Patient
资源。 这意味着,可以将包含“Meadowers”或“59 Meadow ST”等值的地址作为搜索结果返回。
链式搜索
若要执行涵盖多个引用参数的一系列搜索操作,可以使用一个句点 .
将引用参数一个一个地追加到服务器请求中,从而“链接”一系列引用参数。 例如,如果要查看所有 DiagnosticReport
资源,其中这些资源具有对包含特定 name
的 Patient
资源的 subject
引用:
GET [your-fhir-server]/DiagnosticReport?subject:Patient.name=Sarah
此请求将返回患者主体名称为“Sarah”的所有 DiagnosticReport
资源。 字段 Patient
之后的句点 .
对 subject
参数的引用参数执行链式搜索。
常规搜索(不是链式搜索)的另一种常见用法是查找特定患者的所有出现情况。 Patient
s 通常具有一个或多个 Encounter
主题。 下面搜索所提供的id
资源Patient
的所有Encounter
资源。
GET [your-fhir-server]/Encounter?subject=Patient/78a14cbe-8968-49fd-a231-d43e6619399f
使用链接搜索,可以找到与特定信息段匹配的所有Encounter
资源,例如 birthdate
。Patient
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
资源,并返回地址为 WA 州的 generalPractitioner
。 换句话说,如果一名病人有来自纽约州的莎拉和州西澳大利亚州法案都引用为病人, generalPractitioner
则两者都返回。
对于搜索必须是涵盖AND
所有条件作为组的操作的情况,请参阅复合搜索中的示例。
反向链式搜索
通过链式搜索,可以根据资源引用的属性搜索资源。 使用反向链搜索,你可以以另一种方式执行此操作。 可以使用 _has
参数,根据引用资源的资源属性搜索资源。 例如, Observation
资源具有引用患者资源的搜索参数 patient
。 使用以下命令查找特定code
引用Observation
的所有患者资源。
GET [base]/Patient?_has:Observation:patient:code=527
此请求返回通过代码527
引用Observation
的病人资源。
此外,反向链式搜索可以具有递归结构。 例如,以下搜索具有 Observation
来自特定用户的 janedoe
审核事件的所有患者。
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
表示“小于或等于”,并指定 9.2
作为钾离子值范围。
搜索下一个条目集
每个单一搜索查询可返回的最大条目数为 1000。 如果超过 1,000 个与搜索查询匹配的条目,则可以使用以下过程查看大于 1000 的条目。
如以下Bundle
结果所示,请使用延续标记url
值searchset
。
"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
是服务器提供的链接,用于检索前 1000 个未显示在前 1000 个条目的条目。
使用 POST 进行搜索
前面提到的所有搜索示例都使用了 GET
请求。 还可以使用请求_search
执行POST
搜索操作。
POST [your-fhir-server]/Patient/_search?_id=45
此请求返回 Patient
值为 45 的资源 id
。 与 GET 请求一样,服务器确定哪一组资源满足条件,并在 HTTP 响应中返回捆绑资源。
使用 POST 进行搜索的另一个示例,其中查询参数作为表单正文提交,如下所示。
POST [your-fhir-server]/Patient/_search
content-type: application/x-www-form-urlencoded
name=John
后续步骤
本文介绍了如何使用不同的搜索参数、修饰符和 FHIR 搜索工具进行搜索。 有关 FHIR 搜索的详细信息,请参阅
注意
FHIR® 是 HL7 的注册商标,经 HL7 许可使用。