跳转到内容
搜索文档

筛选

最后更新 查看 MarkdownAgent 设置

筛选器将查询限制到特定账户或一组 zone、按日期的请求,或来自特定 user agent 的请求等。没有筛选器时,查询可能性能下降,结果可能超出支持的上限,返回的数据也可能很嘈杂。

筛选器结构

GraphQL 筛选器由 GraphQL Input Object 表示,它在节点上公开布尔代数。

您可以在以下资源上将筛选器用作参数:

  • zones
  • accounts
  • tables(datasets)

Zone 筛选器

允许通过 zone ID(zoneTag)查询 zone 相关数据。

zones(filter: {zoneTag: "your Zone ID"}) {
    ...
}

zone 筛选器必须符合以下语法:

filter
    { zoneTag: t }
    { zoneTag_gt: t }
    { zoneTag_in: [t, ...] }

不支持复合筛选器(逗号分隔、ANDOR)。

当您知道 zone ID 时,使用 zoneTag: tzoneTag_in: [t, ...] 形式。如果不知道 zone ID,使用 zoneTag_gt: t 形式配合 limit 遍历所有 zone。zone 始终按字母数字排序。

省略筛选器可获取所有 zone 的结果(在支持的上限内)。

Account 筛选器

account 筛选器使用与 zone 筛选器相同的结构和规则,只是使用 Account ID(accountTag)而不是 Zone ID(zoneTag)。

进行账户范围查询时必须指定 account 筛选器,且不能同时查询多个账户。

Table(dataset)筛选器

table 筛选器要求您至少查询一个节点。使用 AND 运算符创建并组合多节点筛选器。table 筛选器也支持 OR 运算符,您必须显式指定。

以下语法描述 table 筛选器,其中 k 是要筛选的 GraphQL 节点,op 是该节点支持的操作符之一:

filter
  { kvs }
kvs
  kv
  kv, kvs
kv
  k: v
  k_op: v
  AND: [filters]
  OR: [filters]
filters
  filter
  filter, filters

操作符

操作符支持因节点类型和节点名称而异。

数组操作符

以下操作符支持所有数组类型:

操作符 比较
has 数组包含某个值
hasall 数组包含列表中的所有值
hasany 数组至少包含列表中的一个值

标量操作符

以下操作符支持所有标量类型:

操作符 比较
gt 大于
lt 小于
geq 大于或等于
leq 小于或等于
neq 不等于
in 在...之中

字符串操作符

like 操作符可用于字符串比较,并支持 % 字符作为通配符。

示例

通用示例

query GeneralExample($zoneTag: string, $start: Time) {
	viewer {
		zones(filter: { zoneTag: $zoneTag }) {
			httpRequestsAdaptiveGroups(
				filter: { datetime_gt: $start, clientCountryName: "GB" }
				limit: 1
			) {
				count
			}
		}
	}
}

筛选特定节点

以下 GraphQL 示例展示如何筛选特定节点。后面是对应的 SQL 等价写法。

GraphQL

httpRequestsAdaptiveGroups(filter: {datetime: "2018-01-01T10:00:00Z"}) {
    ...
}

SQL

WHERE datetime="2018-01-01T10:00:00Z"

筛选多个字段

以下 GraphQL 示例展示如何对多个字段应用筛选器,此例为两个 datetime 字段。后面是对应的 SQL 等价写法。

GraphQL

httpRequests1hGroups(filter: {datetime_gt: "2018-01-01T10:00:00Z", datetime_lt: "2018-01-01T11:00:00Z"}) {
    ...
}

SQL

WHERE (datetime > "2018-01-01T10:00:00Z") AND (datetime < "2018-01-01T10:00:00Z")

使用 OR 操作符筛选

以下 GraphQL 示例演示在筛选器中使用 OR 操作符。此 OR 操作符在 clientCountryName 字段中筛选值为 USGB 的数据。

GraphQL

httpRequestsAdaptiveGroups(
        filter: {
          datetime: "2018-01-01T10:00:00Z",
          OR:[{clientCountryName: "US"}, {clientCountryName: "GB"}]) {
    ...
}

SQL

WHERE datetime="2018-01-01T10:00:00Z"
  AND ((clientCountryName = "US") OR (clientCountryName = "GB"))

按单个值筛选数组

以下 GraphQL 示例展示如何筛选数组字段,仅返回包含特定值的数据。后面是对应的 SQL 等价写法。

GraphQL

mnmFlowDataAdaptiveGroups(filter: {ruleIDs_has: "rule-id"}) {
    ...
}

SQL

WHERE has(ruleIDs, 'rule-id')

按多个值筛选数组

以下 GraphQL 示例展示如何筛选数组字段,仅返回包含多个值的数据。后面是对应的 SQL 等价写法。

GraphQL

mnmFlowDataAdaptiveGroups(filter: {ruleIDs_hasall: ["rule-id-1", "rule-id-2"]}) {
    ...
}

SQL

WHERE has(ruleIDs, 'rule-id-1') AND has(ruleIDs, 'rule-id-2')

筛选终端用户

添加 requestSource 筛选器并设为 eyeball,可仅返回网站终端用户的请求、数据传输和访问数据。这将排除 Cloudflare 产品(例如 cache purge、healthchecks、Workers 子请求)在您的 zone 上执行的操作。

子查询(高级筛选)

目前不支持子查询。您可以使用两个 GraphQL 查询作为此限制的变通方案。

这篇文档对您有帮助吗?