你当前正在访问 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.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资源。 这意味着,你可以有值(如“草地巷”、“派恩米多广场”或返回正匹配的“草甸街”)的地址。

若要执行涵盖引用资源中包含的元素的搜索操作,可以“链接”一系列参数以及 .。 例如,如果要查看引用subject患者的所有DiagnosticReportname资源,请使用以下查询。

 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 资源的引用。 若要查找特定Observationcode资源引用的所有Patient资源,请使用以下代码。

GET {{FHIR_URL}}/Patient?_has:Observation:patient:code=527

此请求返回 PatientObservation 具有代码 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引用为 <a0/> 的资源)和valuecode/> 连接的元素。 按照运算符的代码$将条件设置为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") 标记 urlsearchset ,如下所示。

    "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 许可使用。