

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# FHIR R4 的搜索参数为 HealthLake
<a name="reference-fhir-search-parameters"></a>

使用 FHIR [https://hl7.org/fhir/R4/http.html#search](https://hl7.org/fhir/R4/http.html#search)交互根据某些筛选条件在 HealthLake 数据存储中搜索一组 FHIR 资源。可以使用`GET`或`POST`请求执行`search`交互。对于涉及个人身份信息 (PII) 或受保护的健康信息 (PHI) 的搜索，建议使用`POST`请求，因为 PII 和 PHI 是作为请求正文的一部分添加的，并在传输过程中进行加密。

**注意**  
本章中描述的 FHIR `search` 交互符合 HL7 FHIR R4 的医疗保健数据交换标准。由于它代表 HL7 FHIR 服务，因此不是通过 AWS CLI 和 AWS SDKs提供的。有关更多信息，请参阅 **FHIR R4 RESTful API** 文档[https://hl7.org/fhir/R4/http.html#search](https://hl7.org/fhir/R4/http.html#search)中的。  
您也可以使用 Amazon Athena 使用 SQL 查询 HealthLake 数据存储。有关更多信息，请参阅集成。

HealthLake 支持以下 FHIR R4 搜索参数子集。有关更多信息，请参阅 [FHIR R4 的搜索参数为 HealthLake](#reference-fhir-search-parameters)。

## 支持的搜索参数类型
<a name="search-parameter-types"></a>

下表显示了中支持的搜索参数类型 HealthLake。


**支持的搜索参数类型**  

| 搜索参数  | 说明 | 
| --- | --- | 
| \$1id | 资源 ID（不是完整网址） | 
| \$1last Upd | 上次更新日期。服务器可以自行决定边界精度。 | 
| \$1tag | 按资源标签搜索。 | 
| \$1个人资料 | 搜索所有标有个人资料的资源。 | 
| \$1安全 | 搜索应用于此资源的安全标签。 | 
| \$1来源 | 搜索资源来源。 | 
| \$1text | 搜索资源的叙述。 | 
| createdAt | 在自定义扩展程序上搜索 createdAt。 | 

**注意**  
以下搜索参数仅适用于 2023 年 12 月 9 日之后创建的数据存储：\$1security、\$1source、\$1text、createAt。

下表显示了如何根据给定资源类型的指定数据类型修改查询字符串的示例。为清楚起见，示例列中的特殊字符未经过编码。要成功查询，请确保查询字符串已正确编码。


**搜索参数示例**  

| 搜索参数类型 | Details  | 示例 | 
| --- | --- | --- | 
|  数字  | 在指定资源中搜索数值。可以观察到重要的数字。有效位数是按搜索参数值确定的，不包括前导零。允许使用比较前缀。 |  `[parameter]=100` `[parameter]=1e2` `[parameter]=lt100`  | 
|  日期/ DateTime  |  搜索特定的日期或时间。预期的格式是，`yyyy-mm-ddThh:mm:ss[Z\|(+\|-)hh:mm]`但可能有所不同。 接受以下数据类型：`date`、`dateTime``instant`、`Period`、和`Timing`。有关在搜索中使用这些数据类型的更多详细信息，请参阅 **FHIR R4 RESTful API** 文档中的[日期](https://www.hl7.org/fhir/search.html#date)。 允许使用比较前缀。  |  `[parameter]=eq2013-01-14` `[parameter]=gt2013-01-14T10:00` `[parameter]=ne2013-01-14`  | 
|  字符串  |  以区分大小写的方式搜索字符序列。 同时支持`HumanName`和`Address`类型。[有关更多详细信息，请参阅 **FHIR R4** 文档中的[`Address`数据类型](https://www.hl7.org/fhir/datatypes.html#Address)条目和数据类型条目。HumanName ](https://www.hl7.org/fhir/datatypes.html#HumanName) 使用`:text`修饰符支持高级搜索。  |  `[base]/Patient?given=eve` `[base]/Patient?given:contains=eve`  | 
|  令牌  |  搜索 close-to-exact与一串字符的匹配项，通常与一对医疗代码值进行比较。 区分大小写与创建查询时使用的代码系统有关。基于Subsumption的查询可以帮助减少与区分大小写有关的问题。为清楚起见`\|`，尚未编码。  |  `[parameter]=[system]\|[code]`: 这里`[system]`指的是编码系统，`[code]`指的是在该特定系统中找到的代码值。 `[parameter]=[code]`: 在这里，您的输入将匹配代码或系统。 `[parameter]=\|[code]`: 此处您的输入将与代码匹配，并且系统属性没有标识符。  | 
|  复合键  |  使用修饰符`$`和`,`运算在单个资源类型中搜索多个参数。 允许使用比较前缀。  |  `/Patient?language=FR,NL&language=EN` `Observation?component-code-value-quantity=http://loinc.org\|8480-6$lt60` `[base]/Group?characteristic-value=gender$mixed`  | 
|  Quantity  |  以值形式搜索数字、系统和代码。必须输入数字，但系统和代码是可选的。基于数量数据类型。有关更多详细信息，请参阅 **FHIR R4** 文档中的[数量](https://www.hl7.org/fhir/datatypes.html#Quantity)。 使用以下假设语法 `[parameter]=[prefix][number]\|[system]\|[code]`  |  `[base]/Observation?value-quantity=5.4\|http://unitsofmeasure.org\|mg` `[base]/Observation?value-quantity=5.4\|http://unitsofmeasure.org\|mg` `[base]/Observation?value-quantity=5.4\|http://unitsofmeasure.org\|mg` `[base]/Observation?value-quantity=le5.4\|http://unitsofmeasure.org\|mg`  | 
|  参考  |  搜索对其他资源的引用。  |  `[base]/Observation?subject=Patient/23` `test`  | 
|  URI  |  搜索可明确标识特定资源的字符串。  |  `[base]/ValueSet?url=http://acme.org/fhir/ValueSet/123`  | 
|  特殊  |  基于集成的医疗 NLP 扩展进行搜索。  | 

## 支持的高级搜索参数 HealthLake
<a name="search-parameters-advanced"></a>

HealthLake 支持以下高级搜索参数。


| Name | 说明 | 示例 | 能力 | 
| --- | --- | --- | --- | 
| \$1include | 用于请求在搜索请求中返回其他资源。它返回目标资源实例引用的资源。 | Encounter?\$1include=Encounter:subject |   | 
| \$1revinclude | 用于请求在搜索请求中返回其他资源。它返回引用主资源实例的资源。 | Patient?\$1id=patient-identifier&\$1revinclude=Encounter:patient |   | 
| \$1summary | 摘要可用于请求资源的子集。 | Patient?\$1summary=text | 支持以下摘要参数：\$1summary=true、\$1summary=false、\$1summary=text、\$1summary=data。 | 
| \$1elements | 请求在搜索结果中将一组特定的元素作为资源的一部分返回。 | Patient?\$1elements=identifier,active,link |   | 
| \$1total | 返回与搜索参数匹配的资源数量。 | Patient?\$1total=accurate | Supp \$1total=accurate ort，\$1total=none。 | 
| \$1sort | 使用逗号分隔的列表表示返回的搜索结果的排序顺序。该-前缀可用于逗号分隔列表中的任何排序规则，以表示降序。 | Observation?\$1sort=status,-date | Support 支持按带有类型的字段进行排序Number, String, Quantity, Token, URI, Reference。Date仅在 2023 年 12 月 9 日之后创建的数据存储支持排序依据。Support 最多支持 5 个排序规则。 | 
| \$1count | 控制搜索包中每页返回多少资源。 | Patient?\$1count=100 | 最大页面大小为 100。 | 
| chaining | 搜索引用资源的元素。将链接搜索.定向到引用资源中的元素。 | DiagnosticReport?subject:Patient.name=peter |   | 
| reverse chaining (\$1has) | 根据引用资源的元素搜索资源。 | Patient?\$1has:Observation:patient:code=1234-5 |   | 

`_include`

`_include`在搜索查询中使用还允许返回其他指定的 FHIR 资源。用于包括`_include`向前链接的资源。

**Example — 用于`_include`查找被诊断为咳嗽的患者或患者群体**  
你可以在指定咳嗽诊断代码的`Condition`资源类型上进行搜索，然后使用`_include`指定也要返回该诊断`subject`的代码。在`Condition`资源类型中，`subject`指的是患者资源类型或组资源类型。  
为清楚起见，示例中的特殊字符未经过编码。要成功查询，请确保查询字符串已正确编码。  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
Condition?code=49727002&_include=Condition:subject
```

`_include:iterate`修饰符

该`_include:iterate`修饰符允许以递归方式包含两个级别的引用资源。例如，

```
GET /ServiceRequest?identifier=025C0931195&_include=ServiceRequest:requester&_include:iterate=PractitionerRole:practitioner
```

将返回与之 ServiceRequest关联的 PractitionerRole （通过请求者引用），然后递归地包含由其引用的从业者。 PractitionerRole此修改器适用于中的所有资源类型 HealthLake。

`_include=*`修饰符

`_include=*`修饰符是一个通配符，它自动包含搜索结果直接引用的所有资源。例如，

```
GET /ServiceRequest?specimen.accession=12345&_include=*
```

将返回匹配项 ServiceRequest 及其引用的所有资源（例如患者、从业人员、标本等），而无需单独指定每个参考路径。此修改器适用于中的所有资源类型 HealthLake。

`_revinclude`

`_revinclude`在搜索查询中使用还允许返回其他指定的 FHIR 资源。用于包含`_revinclude`向后链接的资源。

**Example — 用于包括`_revinclude`与特定患者关联的相关遭遇和观察资源类型**  
要进行此搜索，首先要`Patient`通过在`_id`搜索参数中指定个人的标识符来定义个人。然后，您可以使用结构`Encounter:patient`和`Observation:patient`来指定其他 FHIR 资源。  
为清楚起见，示例中的特殊字符未经过编码。要成功查询，请确保查询字符串已正确编码。  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/
Patient?_id=patient-identifier&_revinclude=Encounter:patient&_revinclude=Observation:patient
```

`_summary`

`_summary`在搜索查询中使用允许用户请求 FHIR 资源的子集。它可以包含以下值之一:`true, text, data, false`. 任何其他值都将被视为无效。返回的资源将在 meta.tag `'SUBSETTED'` 中标记，以表示资源不完整。
+ `true`：返回所有在资源基本定义中标记为 “摘要” 的受支持元素。
+ `text`: 仅返回 “文本”、“id”、“meta” 元素，仅返回顶级必填元素。
+ `data`: 返回除 “文本” 元素之外的所有部分。
+ `false`: 返回资源的所有部分

在单个搜索请求中，`_summary=text`不能与`_include`或`_revinclude`搜索参数组合使用。

**Example — 获取数据存储中患者资源的 “文本” 元素。**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_summary=text
```

`_elements`

`_elements`在搜索查询中使用允许请求特定的 FHIR 资源元素。返回的资源将在 meta.tag `'SUBSETTED'` 中标记，以表示资源不完整。

该`_elements`参数由以逗号分隔的基本元素名称列表组成，例如在资源中根级别定义的元素。只有列出的元素才会被返回。如果`_elements`参数值包含无效元素，服务器将忽略它们并返回必需元素和有效元素。

`_elements`不适用于包含的资源（搜索模式为的返回资源`include`）。

在单个搜索请求中，`_elements`不能与`_summary`搜索参数组合使用。

**Example — 获取 HealthLake 数据存储中患者资源的 “标识符”、“活动”、“链接” 元素。**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_elements=identifier,active,link
```

`_total`

`_total`在搜索查询中使用将返回与请求的搜索参数相匹配的资源数量。 HealthLake 将返回 of search 响应中匹配资源的总数（搜索模式为`Bundle.total`的返回资源`match`）。

`_total`支持`accurate`、`none`参数值。 `_total=estimate`不支持。任何其他值都将被视为无效。 `_total`不适用于包含的资源（搜索模式为的返回资源`include`）。

**Example — 获取数据存储中患者资源的总数：**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_total=accurate
```

`_sort`

`_sort`在搜索查询中使用可按特定顺序排列结果。结果根据以逗号分隔的排序规则列表按优先顺序排序。排序规则应该是有效的搜索参数。任何其他值都将被视为无效。

在单个搜索请求中，您最多可以使用 5 个排序搜索参数。您可以选择使用`-`前缀来表示降序。默认情况下，服务器将按升序排序。

支持的排序搜索参数类型为:`Number, String, Date, Quantity, Token, URI, Reference`. 如果搜索参数指的是嵌套的元素，则排序不支持此搜索参数。例如，搜索资源类型的 “名称” 患者指的是患者。 HumanName 数据类型的名称元素被视为嵌套。因此，不支持按 “姓名” 对患者资源进行排序。

**Example — 在数据存储中获取患者资源，并按出生日期升序对其进行排序：**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_sort=birthdate
```

`_count`

该参数`_count`被定义为向服务器发出的有关应在单个页面中返回多少资源的指令。

最大页面大小为 100。任何大于 100 的值均无效。 `_count=0`不支持。

**Example — 搜索患者资源并将搜索页面大小设置为 25：**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_count=25
```

`Chaining and Reverse Chaining(_has)`

FHIR 中的链接和反向链接提供了一种更高效、更紧凑的方式来获取相互关联的数据，从而减少了对多个单独查询的需求，并使开发人员和用户更方便地检索数据。

如果任何级别的递归返回的结果超过 100 个，则 HealthLake 将返回 4xx，以防止数据存储过载并导致多次分页。

**Example — Chaining-获取所有 DiagnosticReport 指向患者姓名为 peter 的患者的内容。**  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/DiagnosticReport?subject:Patient.name=peter
```

**Example — 反向链接-获取患者资源，其中患者资源由至少一个观察点引用，其中观察结果的代码为 1234，其中观察结果指患者搜索参数中的患者资源。**  
  

```
GET https://healthlake.region.amazonaws.com/datastore/datastoreId/r4/Patient?_has:Observation:patient:code=1234
```

## 支持的搜索修饰符
<a name="search-parameter-modifiers"></a>

搜索修饰符用于基于字符串的字段。中的所有搜索修饰符都 HealthLake 使用基于布尔值的逻辑。例如，您可以指定`:contains`较大的字符串字段应包含一个小字符串，以便将其包含在搜索结果中。


**支持的搜索修饰符**  

| 搜索修饰符 | Type | 
| --- | --- | 
| :缺失 | 除外的所有参数 Composite | 
| :精确 | 字符串 | 
| :包含 | 字符串 | 
| :不是 | 令牌 | 
| :文本 | 令牌 | 
| :标识符 | 参考 | 
| :以下 | URI | 

## 支持的搜索比较器
<a name="search-comparators"></a>

您可以使用搜索比较器来控制搜索中匹配的性质。在搜索数字、日期和数量字段时，您可以使用比较器。下表列出了支持的搜索比较器及其定义。 HealthLake


**支持的搜索比较器**  

|  搜索比较器  |  说明  | 
| --- | --- | 
| eq | 资源中参数的值等于提供的值。 | 
| ne | 资源中参数的值不等于提供的值。 | 
| gt | 资源中参数的值大于提供的值。 | 
| lt | 资源中参数的值小于提供的值。 | 
| ge | 资源中参数的值大于或等于提供的值。 | 
| le | 资源中参数的值小于或等于提供的值。 | 
| sa | 资源中参数的值从提供的值之后开始。 | 
| eb | 资源中参数的值在提供的值之前结束。 | 

## 不支持 FHIR 搜索参数 HealthLake
<a name="search-parameters-unsupported"></a>

HealthLake 支持所有 FHIR 搜索参数，但下表中列出的参数除外。有关 FHIR 搜索参数的完整列表，请参阅 [FHIR 搜索参数注册](https://hl7.org/fhir/R4/searchparameter-registry.html)表。


**不支持的搜索参数**  

|  |  | 
| --- |--- |
| 捆绑包构成 | 位置-附近 | 
| 捆绑包标识符 | C onsent-source-reference | 
| 捆绑消息 | 合同患者 | 
| 捆绑包类型 | 资源内容 | 
| 捆绑包时间戳 | 资源查询 | 