你当前正在访问 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

在返回中,你将获取其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 具有 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引用的资源。

此外,反向链接搜索可以具有递归结构。 For example, if you want to search for all patients referenced by an Observation where the observation is referenced by an AuditEvent from a specific practitioner named 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作为resultObservation) value引用的资源和与该元素连接的元素 (元素code。 按照运算符的代码,$value“小于”) 9.2 (的钾 mmol/L 值) 的条件设置为lt (。

复合搜索参数还可用于使用逻辑 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 的权限。