查询语法

如需搜索资产,您可以通过指定 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(纪元时间戳 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*",则将其视为词元化分隔符。该查询等效于“计算存储”。

示例:令牌前缀匹配

  • 返回 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:*