你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
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
作为回报,你将获得元素值不female
为 的所有Patient
资源gender
,包括未指定性别值的任何患者。 这与搜索 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
。 如果患者的名称为 Jonathan
或 JON
,则搜索将忽略这些资源,因为其名称与指定的值不匹配。
:contains
:contains
用于查询 string
类型元素,并允许在 字段中的任意位置与指定值匹配。 contains
不区分大小写,可识别与其他字符串联的匹配字符串。 例如:
GET {{FHIR_URL}}/Patient?address:contains=Meadow
此请求将返回包含address
字符串“Meadow”的元素字段的所有Patient
资源, (不区分大小写) 。 这意味着你可以具有返回正匹配项的“Meadows Lane”、“Pinemeadow Place”或“Meadowlark St”等值的地址。
链式搜索
若要执行涵盖所引用资源中包含的元素的搜索操作,可以将一系列参数与 .
一起“链接”。 例如,如果要查看所有 DiagnosticReport
资源,其中包含 subject
对 由 name
指定的患者的引用:
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
“小于”) 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。 但是,你可能有超过 1000 个与搜索查询匹配的资源实例,并且你希望在前 1000 个条目之后检索下一组结果。 在这种情况下,将使用延续 (即 "next"
搜索返回的捆绑包中的searchset
) 令牌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"
}
],
需要对提供的 URL 发出 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 许可使用。