你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
FHIR 搜索示例
下面是 Fast Healthcare 互操作性资源 (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
返回时,将获取其gender
元素值不是female
的所有Patient
资源,包括未指定性别值的任何患者。 这不同于搜索 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
资源。 这意味着,你可以有值(如“草地巷”、“派恩米多广场”或返回正匹配的“草甸街”)的地址。
链式搜索
若要执行涵盖引用资源中包含的元素的搜索操作,可以“链接”一系列参数以及 .
。 例如,如果要查看引用subject
患者的所有DiagnosticReport
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
资源的引用。 若要查找特定Observation
code
资源引用的所有Patient
资源,请使用以下代码。
GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527
此请求返回 Patient
由 Observation
具有代码 527
的资源引用的资源。
此外,反向链接搜索可以具有递归结构。 例如,如果要搜索由Observation
特定从业janedoe
者引用的观察结果引用AuditEvent
的所有患者,请使用:
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
引用为 <value
与 $
将条件设置为lt
(对于“小于”) 9.2
(对于钾摩尔value
/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。 但是,可能有超过 1,000 个与搜索查询匹配的资源实例,并且希望在前 1,000 个条目之后检索下一组结果。 在这种情况下,你将在从搜索返回的捆绑包中使用延续(即 "next"
) 标记 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": "{{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 许可使用。