你当前正在访问 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.tagSUBSETTED ,指示并非所有为资源定义的元素都包括在内。

搜索修饰符

: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 具有 givenfamily 名称的资源 Jon。 如果患者的名称为 JonathanJON,则搜索将忽略这些资源,因为其名称与指定的值不匹配。

: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 资源。 将 . 链接搜索指向 namePatient 引用资源中的 元素。

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 引用 Observationresult) 的资源 (的元素,以及 valuecode连接的元素。 在代码后使用 $ 运算符将 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 许可使用。