如需搜索资产,您可以通过指定 FIELD
、运算符和 QUERY
来过滤搜索结果。
文本完全匹配:等于 (=
) 运算符
FIELD=QUERY
查询示例:policy=amy.2020@gmail.com
。
equals
(=
) 运算符检查 QUERY
是否与资产元数据 FIELD
的值完全匹配。区分大小写。对于重复字段,如果 QUERY
与字段的某个值匹配,相应素材资源会被视为匹配项。受支持的 FIELD
名称取决于查询是资源搜索还是 Identity and Access Management (IAM) 政策搜索。QUERY
是一个短语,但不能包含通配符。
文本部分匹配:冒号 (:
) 运算符
FIELD:QUERY
查询示例:policy:amy.2020@gmail
。
执行搜索时,系统会将 QUERY
与指定资产元数据 FIELD
的值进行比较。查询和资产元数据字段会转换为单词序列(即词法单元)以便进行比较。这是通过以下操作实现的:
通过将特殊字符视为分隔符来移除前导/尾随特殊字符并将搜索值词法单元化。令牌化特殊字符是字母数字
[a-zA-Z0-9]
、下划线[_]
或和号[&]
之外的字符。执行 Unicode 大小写折叠,以便忽略字符大小写。
以下是一些词法单元化示例:
"amy-2020@GMAIL.com"
词法单元化为:[amy,2020,gmail,com]
"google.com/cloud"
词法单元化为:[google,com,cloud]
"Compute %Instance%"
词法单元化为:[compute,instance]
"$%^*-!"
词法单元化为:[]
""
词法单元化为:[]
"compute*storage"
词法单元化为:[compute,storage]
"compute&storage"
词法单元化为:[compute&storage]
"BOB_test@gmail.com"
词法单元化为:[bob_test,gmail,com]
"instance/_my_vm_"
词法单元化为:[instance,_my_vm_]
has
(:
) 运算符检查 QUERY
的每个单词是否存在于资产元数据字段的值中。此外,它还会检查字词的顺序和连续性。受支持的 FIELD
可能会有所不同,具体取决于是资源搜索还是 IAM 政策搜索。QUERY
可以是短语或短语的组合。
示例
例如,policy
字段的值为 amy.2020@gmail.com
的某项素材资源与以下查询匹配:
- 匹配的原因是词组与字段值完全一样。
policy=amy.2020@gmail.com
- 匹配的原因是标点符号字符被视为分隔符,并且查询不区分大小写。
policy:amy-2020@GMAIL.com
- 匹配的原因是短语中的字词按顺序匹配。请注意,
"amy 2020 gmail"
是一个短语;字词会按顺序且连续匹配。
policy:"amy 2020 gmail"
- 匹配的原因是字词组合可以按任意顺序显示。请注意,
(gmail 2020 amy)
是一个组合;字词会进行匹配并且不一定按顺序。
policy:(gmail 2020 amy)
- 匹配的原因是短语中的字词按顺序匹配,而组合中的字词以任意顺序显示。请注意,
"amy 2020"
是一个短语,字词会按顺序且连续匹配。(gmail "amy 2020")
是一个组合;gmail
和"amy 2020"
不一定按顺序进行匹配。
policy:(gmail "amy 2020")
- 匹配的原因是可以在短语中使用
*
来表示前缀匹配。
policy:amy-20*
policy
字段的值为 "amy.2020@gmail.com"
的资产与以下查询不匹配:
- 不匹配的原因是词组区分大小写。请改用
has
(:
) 运算符进行不区分大小写匹配。
policy=amy.2020@GMAIL.com
- 不匹配,因为词组部分与字段的值匹配。请改用
has
(:
) 运算符进行部分匹配。
policy=amy.2020@gmail
数字匹配:比较(=
、>
、>=
、<
、<=
)运算符
FIELD=QUERY
FIELD>QUERY
FIELD>=QUERY
FIELD<QUERY
FIELD<=QUERY
比较运算符会检查 QUERY
与资产元数据 FIELD
的值之间的比较结果是否为 true。
支持的 FIELD
名称包括 createTime
和 updateTime
。
对于时间戳字段(createTime
和 updateTime
),QUERY
可以是 64 位的带符号整数,表示纪元时间戳(以秒为单位);也可以是采用以下格式之一的日期时间字符串(时区为 UTC):
YYYY-MM-DD:2021-01-01(引号可选)
"YYYY-MM-DDThh:mm:ss":"2021-01-01T00:00:00"(需要引号)
示例
例如,createTime
字段的值为 1609459200
(纪元时间戳 2021-01-01T00:00:00
)的资产与以下查询匹配:
等于
createTime=1609459200
createTime=2021-01-01
createTime="2021-01-01T00:00:00"
大于。
createTime>1500000000
createTime>2020-01-01
createTime>"2020-01-01T00:00:00"
大于或等于。
createTime>=1609459200
createTime>=2021-01-01
createTime>="2021-01-01T00:00:00"
小于。
createTime<1700000000
createTime<2022-01-01
createTime<"2022-01-01T00:00:00"
小于或等于。
createTime<=1609459200
createTime<=2021-01-01
createTime<="2021-01-01T00:00:00"
Phrase
短语是用双引号 ("
) 引起来的一个或多个字词。对于短语,字词的顺序很重要。短语中的字词必须按顺序并且连续匹配。请注意,如需匹配多个字词而不遵循顺序,您必须使用组合(例如 field:(word1 word2 word3)
)。
以下表达式是相同的:
policy:amy
policy:"amy"
policy:amy.2020@gmail.com
policy:"amy.2020@gmail.com"
name://cloudresourcemanager.googleapis.com/projects/projects/foo-bar
name:"//cloudresourcemanager.googleapis.com/projects/projects/foo-bar"
以下短语必须用引号括起:
name:"my instance"
policy:"amy%2020@gmail.com"
description:"domain:gmail.com"
description:"hello \"world\""
description:"hello\\world"
示例:短语
返回
policy
字段按顺序且连续包含字词amy
和字词2020
的资源:policy:"amy 2020"
如果您的资源的
policy
字段值为"amy.2020@gmail.com"
,则上述查询匹配。如果您的资源的
policy
字段值为"2020.amy@gmail.com"
,则上述查询不会匹配,因为字词顺序不匹配。如果您的资源的
policy
字段值为"amy.us.2020@gmail.com"
,则上述查询不匹配,因为字词并不连续匹配。
组合
搜索短语可以使用 AND
或 OR
进行组合。您需要使用括号将组合括起来。
示例:组合
返回
policy
字段中同时包含单词amy
和单词john
的资源,而不遵循顺序。AND
在组合中是可选的。请注意,如需按顺序匹配多个字词,您必须使用词组(例如field:"word1 word2 word3"
)。owner:(amy john)
返回
policy
字段具有字词amy
或字词john
的资源。policy:(amy OR john)
返回
policy
字段同时包含字词amy
和字词john
或包含字词bob
的资源。policy:((amy john) OR bob)
返回
policy
字段同时包含字词amy
和字词john
或name
字段包含字词bob
的资源。policy:(amy john) OR name:bob
排除搜索过滤条件
可以使用 NOT
运算符否定搜索过滤条件。圆括号受支持,但并非必需。
示例:否定搜索过滤条件
返回
state
字段不包含ACTIVE
一词的资产。NOT state:ACTIVE
返回
policy
字段既不包含amy
一词又不包含john
一词的资产。NOT policy:(amy OR john)
返回
networkTags
字段不包含internal
一词或private
一词的资产。NOT (networkTags:internal OR networkTags:private)
通配符
星号 (*
) 可以在短语中用作通配符。根据其位置,可能具有不同的含义。
如果它位于短语末尾(例如
"am 20*"
),则是令牌前缀匹配指示符。该查询等于(am* 20*)
。它与包含以“am”开头的令牌(例如“amy”)和以“20”开头的令牌(例如“2021”)的字段匹配。前缀的顺序无关紧要。如果整个短语仅包含一个
*
(例如"labels.env:*"
),则执行存在性检查。它会检查是否存在给定的标签键“env”。不支持其他字段。如果它位于短语中间,例如
"compute*storage"
,则会被视为令牌化分隔符。该查询等效于“计算存储空间”。如果它同时位于短语的开头和结尾,例如
"*compute storage*"
,则将其视为词元化分隔符。该查询等效于“计算存储”。
示例:令牌前缀匹配
返回
policy
字段包含以am
开头的字词的资源:policy:am*
返回
policy
字段包含两个字词且"amy"
和"20"
作为前缀的资源:policy:"amy 20*" policy:"20 amy*"
如果您的
policy
字段值为"amy.2020@gmail.com"
,则上述查询均匹配。令牌化后,"amy"
和"20"
都是前缀。请注意,查询字符串"amy 20*"
与"amy 20"
不同。后者要求20
是一个完整的字词,而不是前缀。
示例:存在标签键
返回其中一个 labels
以“env”作为键且具有任何值(包括空值或没有值)的资源:
labels.env:*