コンテンツにスキップ

フィルタリング

フィルタは、特定のアカウントやゾーンのセット、日付によるリクエスト、または特定のユーザーエージェントからのリクエストにクエリを制約します。フィルタがない場合、クエリはパフォーマンスの低下を引き起こす可能性があり、結果がサポートされている範囲を超えることがあり、返されるデータがノイズを含む可能性があります。

フィルタ構造

GraphQLフィルタは、GraphQL Input Objectによって表され、ノード上でのブール代数を公開します。

以下のリソースでフィルタを引数として使用できます:

  • zones
  • accounts
  • tables (datasets)

ゾーンフィルタ

ゾーンID(zoneTag)によってゾーン関連データをクエリすることを許可します。

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

ゾーンフィルタは、以下の文法に従う必要があります:

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

複合フィルタ(カンマ区切り、ANDOR)はサポートされていません。

ゾーンIDがわかっている場合は、zoneTag: tおよびzoneTag_in: [t, ...]の形式を使用します。ゾーンIDが不明な場合は、すべてのゾーンを横断するためにzoneTag_gt: tの形式を使用します。ゾーンは常にアルファベット順にソートされます。

フィルタを省略すると、すべてのゾーンの結果を取得できます(サポートされている制限まで)。

アカウントフィルタ

アカウントフィルタは、ゾーンフィルタと同じ構造とルールを使用しますが、ゾーンID(zoneTag)の代わりにアカウントID(accountTag)を使用します。

アカウントスコープのクエリを行う際には、アカウントフィルタを指定する必要があり、複数のアカウントを同時にクエリすることはできません。

テーブル(データセット)フィルタ

テーブルフィルタは、少なくとも1つのノードをクエリする必要があります。AND演算子を使用してマルチノードフィルタを作成および組み合わせます。テーブルフィルタは、明示的に指定する必要があるOR演算子もサポートしています。

以下の文法は、テーブルフィルタを説明しており、kはフィルタを適用するGraphQLノードで、opはそのノードに対してサポートされている演算子の1つです:

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

演算子

演算子のサポートは、ノードタイプとノード名によって異なります。

配列演算子

すべての配列タイプに対してサポートされている演算子は以下の通りです:

演算子比較
has配列が値を含む
hasall配列がリストのすべての値を含む
hasany配列がリストの少なくとも1つの値を含む

スカラー演算子

すべてのスカラータイプに対してサポートされている演算子は以下の通りです:

演算子比較
gtより大きい
ltより小さい
geqより大きいか等しい
leqより小さいか等しい
neq等しくない
in含まれている

文字列演算子

like演算子は文字列比較に利用でき、ワイルドカードとして%文字をサポートします。

一般的な例

{
viewer {
zones(filter: {zoneTag: $zoneTag}) {
httpRequestsAdaptiveGroups(filter: {datetime_gt: "2021-06-10T00:00:00Z", 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の例は、複数のフィールド、ここでは2つの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フィールドでUSまたはGBの値をフィルタリングします。

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"))

1つの値で配列をフィルタリング

以下の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')

エンドユーザーをフィルタリング

eyeballrequestSourceフィルタを追加して、あなたのウェブサイトのエンドユーザーに関するリクエスト、データ転送、および訪問データのみを返します。これにより、Cloudflare製品(例:キャッシュパージ、ヘルスチェック、Workersのサブリクエスト)によるアクションは除外されます。

サブクエリ(高度なフィルタ)

サブクエリは現在サポートされていません。この制限を回避するために、2つのGraphQLクエリを使用できます。