查询语法

要搜索资产,您可以通过指定 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 名称包括 createTimeupdateTime

对于时间戳字段 (createTimeupdateTime),QUERY 可以是 64 位有符号整数,表示以秒为单位的纪元时间戳;也可以是以下格式之一的日期时间字符串(时区为 UTC):

  • YYYY-MM-DD:2021-01-01(引号可选)

  • "YYYY-MM-DDThh:mm:ss":"2021-01-01T00:00:00"(需要引号)

示例

例如,一项资产的 createTime 字段的值为 1609459200(周期 timestamp of 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",则上述查询不匹配,因为字词并不连续匹配。

组合

搜索短语可以使用 ANDOR 进行组合。您需要使用括号将组合括起来。

示例:组合

  • 返回 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 和字词 johnname 字段包含字词 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”。

  • 例如,如果它同时出现在短语的开头和结尾, "*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:*