

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

# 资源管理器的搜索查询语法参考
<a name="using-search-query-syntax"></a>

AWS 资源探索器 可帮助您在自己的 AWS 资源中找到个人资源 AWS 账户。为了帮助您找到所需的确切资源，资源管理器接受支持本主题所述语法的搜索查询字符串。有关演示如何使用此处所述功能的示例查询，请参阅 [资源管理器搜索查询示例](using-search-query-examples.md)。

**注意**  
目前，附加到 AWS Identity and Access Management (IAM) 资源（例如角色或用户）的标签未编制索引。

## 查询在资源管理器中的工作原理
<a name="query-background"></a>

搜索查询始终使用视图。如果您没有明确指定一个视图，则资源管理器将使用您正在 AWS 区域 使用的默认视图。

视图决定哪些资源可供您查询。您可以创建不同的视图，每个视图都返回一组不同的资源。

例如，您可以创建一个仅包含用键 `Environment` 和值 `Production` 标记的资源的视图。然后，您可以选择仅向有业务理由查看这些资源的用户授予该视图的访问权限。包含 `Alpha` 或 `Beta` 环境资源的单独视图可由需要查看这些资源的不同用户访问。有关控制谁有权访问哪些视图的信息，请参阅 [授予对资源管理器视图的访问权限以进行搜索](manage-views-grant-access.md)。

## 查询字符串语法
<a name="query-syntax"></a>

本部分提供有关查询语法、筛选条件和筛选运算符的基本方面的信息。

### 基础知识
<a name="query-syntax-basics"></a>

最基本的是，`QueryString` 是一组由逻辑 `OR` 运算符*隐式*连接的自由格式文本关键字。使用空格将每个关键字与其他关键字分开，如下例所示：

`ec2 billing test gamma`

资源管理器评估此关键字列表：

`ec2 OR billing OR test OR gamma`

资源管理器按相关性对结果进行排序，优先考虑与更多搜索词匹配的资源。与一个或多个术语不匹配的资源不会排除在结果之外。但是，资源管理器认为它们的相关性较低，并在搜索结果中将其进一步向下推送。

如果您为 `QueryString` 参数指定一个空字符串，则您的查询通过用于操作的视图返回可用的前 1000 个资源。任何查询可返回的最大资源数为 1000。

**注意**  
AWS 保留更新用于评估自由格式文本关键字的匹配逻辑和相关性算法的权利，以便我们可以为客户提供最相关的结果。因此，使用自由文本关键字的相同查询返回的结果可能会随着时间的推移而发生变化。如果您需要更确切的结果，则建议您使用筛选条件。筛选条件匹配逻辑不会随着时间的推移而改变。

### 筛选条件
<a name="query-syntax-filters"></a>

您可以通过添加***筛选条件***来更严格地限制查询结果。与文本关键字不同，过滤器在查询中使用**AND**运算符进行评估。例如，考虑以下由两个自由格式关键字和两个筛选条件组成的查询：

```
test instance service:EC2 region:us-west-2
```

此查询的估算方式如下：

```
( test OR instance ) AND service:EC2 AND region:us-west-2
```

过滤器始终使用**AND**逻辑运算符进行评估。如果某个资源与筛选条件不匹配，则该资源不会包含在结果中。示例查询的结果包括与 Amazon 关联EC2且位于美国西部（俄勒冈州） AWS 区域 且至少以某种方式附加了其中一个关键词的所有资源。

**注意**  
由于隐式 `AND`，您可以成功地对只能有一个与资源关联的值的属性使用一个筛选条件。例如，一个资源只能是一个 AWS 区域的一部分。因此，以下查询将不返回结果。  

```
region:us-east-1 region:us-west-1
```
此限制***不***适用于可以同时拥有多个值的属性的筛选条件，例如 `tag:`、`tag.key:` 和 `tag.value:`。

下表列出了可在资源管理器搜索查询中使用的可用筛选条件名称。


| 筛选条件名称 | 说明和示例 | 
| --- | --- | 
|  `accountid:`  |   AWS 账户 拥有资源的。资源管理器在结果中仅包含指定账户所拥有的资源。 `accountid:123456789012`  | 
|  `application:`  |  此筛选条件使您能够搜索带有 `awsApplication` 标签键和资源组值的资源。您可以按应用程序名称或应用程序资源组进行搜索ARN。 `application:MyApplicationName` `application:arn:aws:resource-groups:us-east-1:123456789012:group/MyApplicationName/123456789abced` `arn:aws:resource-groups:us-east-1:123456789012:group/MyApplicationName/123456789abced`  要使用此筛选条件，您的视图必须有权访问标记数据。   | 
|  `id:`  |  单个资源的标识符，表示为 A [mazon 资源名称 (ARN)](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。 `id:arn:aws:license-manager:us-east-1:123456789012:license-configuration:lic-ecbd5574fd92cb0d312baea26EXAMPLE`  | 
|  `region:`  |  资源 AWS 区域 所在的位置。资源浏览器仅在结果中包含驻留在指定中的资源 AWS 区域。 `region:us-east-1`  仅键入区域代码（不带筛选条件，例如 `us-east-1`）不会返回与 `region:us-east-1` 相同的结果。之所以出现这种结果是因为，作为一个不是筛选条件的自由格式文本关键字，区域代码被分解成不同的部分。例如，以 `us`、`east` 和 `1` 的形式搜索 `us-east-1`。当您使用 `region:` 前缀时，不会对组件进行这种细分。   | 
|  `region:global`  |  `region:`筛选器的一种特殊情况，您可以使用它来查找与个人无关 AWS 区域 但被视为全球范围的资源。 `region:global`  仅键入关键字 `global` 不会返回与 `region:global` 相同的结果，因为字面单词“global”未附加到全局资源。键入 `global` 作为关键字只会返回那些具有与该资源关联的文字字符串的资源。   | 
|  `resourcetype:`  |  `service:type` 表示法中的资源类型。资源管理器在结果中仅包含指定类型的资源。 `resourcetype:ec2:instance`  | 
|  `resourcetype.supports:`  |  此筛选器使您能够搜索支持标签的资源。 `tags`是唯一支持的值。资源浏览器仅在结果中包含可标记的资源。 `resourcetype.supports:tags`  | 
|  `service:`  |  与 AWS 服务 资源类型相关联的。资源管理器在结果中仅包含指定服务所创建和管理的资源。 `service:ec2`  | 
|  `tag:`  |  表示为 `<key>=<value>` 的标签键/值对。资源管理器仅在结果中包含具有匹配键和指定值的标签的资源。 `tag:environment=production`  | 
|  `tag:all`  |  `tag:`筛选器的一种特殊情况，允许您搜索附加了一个或多个用户创建的标签的资源，即使资源管理器不支持该资源类型。  带有 *AWS 服务创建*标签的资源仍会显示在此筛选条件的结果中。   | 
|  `tag:none`  |  `tag:` 筛选条件的一种特殊情况，使您能够搜索未附加任何用户创建标签的任何资源。  带有 *AWS 服务创建*标签的资源仍会显示在此筛选条件的结果中。   | 
|  `tag.key:`  |  标签键。资源管理器仅在结果中包含具有匹配键（无论值如何）的标签的资源。 `tag.key:environment`  | 
|  `tag.value:`  |  标签值。资源管理器仅在结果中包含具有匹配值（无论键名称如何）的标签的资源。 `tag.value:production`  | 

### 筛选条件运算符
<a name="query-syntax-operators"></a>

您可以通过将下表所示的运算符之一作为字符串的一部分来修改关键字和筛选条件。


| 运算符 | 说明和示例 | 
| --- | --- | 
|  `"multiple word phrase"` 或者 "*hyphenated-phrase*"  |  用双引号字符（`" "`）将应视为单个关键字的多字短语括起来。资源管理器仅包含与整个短语匹配、所有单词合在一起且按指定顺序排列的资源。 如果您不使用双引号，资源管理器会通过空格或连字符将短语分解为各组成部分，并包含与各个组成部分匹配的资源，即使它们不在一起或顺序不同。报价应该在操作员之后的所有内容周围。 `"This matches only resources with the whole sentence."` `This matches resources with any of the words.` `"us-east-1"` – 仅匹配与该确切区域关联的资源。 `us-east-1` – 匹配任何包含“us”、“east”或“1”的资源。 `-tag:"environment=production"`   | 
|  `keyword*`  |   前缀通配符匹配。您只能在字符串的末尾放置通配符（星号 `*`）。资源管理器仅在结果中包含值在 `*` 前以前缀文本开头的资源。以下示例匹配所有 AWS 区域 以开头的内容`us-east`。 `region:us-east*`  统一搜索会自动在字符串中第一个关键字的末尾插入通配符（`*`）运算符。这意味着统一的搜索结果包括与任何以指定关键字开头的字符串相匹配的资源。 通过**查询**文本框，在资源管理器控制台的[资源搜索](https://console.aws.amazon.com/resource-explorer/home#/explorer)页面上执行的搜索，***不会***自动附加通配符。您可以在搜索字符串中的任何术语后面手动插入 `*`。   | 
|  `-keyword`  |  `Not` 运算符。您可以在其关键字或筛选条件的开头放置连字符（`-`），以反转搜索结果。资源管理器会从结果中***排除***与该运算符后面的关键字或筛选条件匹配的任何资源。以下示例会将与 Amazon EC2 服务关联的所有资源排除在结果之外。 `-service:ec2`  如果您使用 AWS CLI `search`命令并且您的`--query-string`参数值将`-`运算符作为第一个字符，则必须使用等号字符 (`=`) 而不是通常的空格字符将参数名称与其值分开。如果使用空格字符，则会CLI误解字符串。例如，下面的查询将失败。 <pre>aws resource-explorer-2 search --query-string "-tag:none region:us-east-1"</pre> 以下经过更正的查询字符串用 `=` 替换了空格，将按预期工作。 <pre>aws resource-explorer-2 search --query-string="-tag:none region:us-east-1"</pre> 如果您更改查询字符串中筛选条件的顺序，使 `-` 不作为参数值中的第一个字符，则可以使用标准空格字符。以下查询字符串有效。 <pre>aws resource-explorer-2 search --query-string "region:us-east-1 -tag:none"</pre>   | 
| \$1<special character> |  您可以对特殊字符进行转义，这些特殊字符必须完全按照显示的内容包含，而不是对其进行解释。如果您的文本包含其中一个特殊字符（` * " - : = \`），您必须在该字符前面加上反斜杠（`\`），以确保该字符是按字面意思理解的。以下示例说明如何使用包含连字符（`-`）字符（`"my-key-word"`）的自由格式文本关键字。 此外，为防止资源管理器将连字符处的表达式分解为三个单独的关键字，可以用双引号将整个短语括起来。  `"my\-key\-word"`  要插入字面反斜杠，请连续插入两个反斜杠字符。第一个反斜杠被解释为转义符，第二个反斜杠是要插入的字面字符。 `"some_text\\some_more_text"`  | 

**注意**  
如果视图包含附加到资源的标签，则 `Search` 操作不会引发搜索字符串的验证错误，因为无效的筛选条件也可能被解释为自由格式的文本搜索。例如，尽管 `cat:blue` ***看起来***像一个筛选条件，但资源管理器不能将其解析为筛选条件，因为 `cat:` 不是有效的已定义筛选条件之一。取而代之的是，Resource Explorer 将整个字符串解释为自由格式的搜索字符串，以允许它匹配诸如标签键名称或其中的一部分之类的内容。ARN  
如果满足以下任一条件，操作将引发验证错误：  
该视图不包含有关标签的信息
搜索查询明确使用标签筛选条件（`tag.key:`、`tag.value:` 或 `tag:`）