INTEGRITY Документация

Фильтрация

Фильтры ограничивают запросы, например, конкретным аккаунтом или набором зон, датой запросов либо запросами от определённого user agent. Без фильтров производительность запросов может снижаться, результаты могут превышать поддерживаемые лимиты, а возвращаемые данные могут быть зашумлены.

Структура фильтра

Фильтр GraphQL представлен в виде Входной объект GraphQL ↗, который открывает доступ к булевой алгебре над узлами.

Фильтры можно использовать в качестве аргумента для следующих ресурсов:

Фильтр зоны

Позволяет запрашивать данные, связанные с зоной, по ID зоны (zoneTag).

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

Фильтр зоны должен соответствовать следующей грамматике:

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

Составные фильтры (через запятую, AND, OR) не поддерживаются.

Используйте zoneTag: t и zoneTag_in: [t, ...] формы, если вы знаете ID зон. Используйте zoneTag_gt: t форму с ограничениями для перебора всех зон, если ID зон неизвестны. Зоны всегда сортируются в алфавитно-цифровом порядке.

Не указывайте фильтр, чтобы получить результаты по всем зонам (до поддерживаемого лимита).

Фильтр аккаунта

Фильтр аккаунта использует ту же структуру и правила, что и фильтр зоны, с той разницей, что применяет ID аккаунта (accountTag) вместо ID зоны (zoneTag).

При запросе в рамках аккаунта необходимо указать фильтр аккаунта, при этом запросить сразу несколько аккаунтов нельзя.

Табличный фильтр (набор данных)

Табличные фильтры требуют, чтобы вы запросили хотя бы один узел. Используйте AND оператор для создания и комбинирования фильтров по нескольким узлам. Табличные фильтры также поддерживают OR оператор, который нужно указывать явно.

Следующая грамматика описывает фильтр таблицы, где 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 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 оператор фильтрует по значению US или GB в clientCountryName поле.

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 (например, очистка кеша, проверки состояния, подзапросы Workers) в вашей зоне.

Подзапросы (расширенные фильтры)

Подзапросы в настоящее время не поддерживаются. Это ограничение можно обойти, используя два запроса GraphQL.