过滤器语法

为了限制 API 检索请求( HTTP GET)中返回的结果,大多数返回资源列表的 API 端点都支持 参数。 IBM® QRadar® 返回资源列表的 API 端点都支持 filter 参数。

filter 参数语法对于支持它的所有端点都是一致的。 请参阅端点的文档以确定过滤器参数是否适用于该端点。 过滤器语法的任何限制都包含在该端点的描述中。 查询参数在发送前必须经过双 URL 编码。

比较运算符

过滤器比较运算符表描述了可用作过滤器参数一部分的比较运算符。

表 1. 过滤器比较运算符
运算符 描述 过滤器语法示例
= 标识与返回的指定值之间的等同性。 要查找 status=CLOSED所在的攻击,请使用以下语法:

GET /api/siem/offenses?filter=status%3DCLOSED

> 标识大于指定的值。 要查找 credibility > 3所在的攻击,请使用以下语法:

/api/siem/offenses?filter=credibility%20%3E%203

< 标识小于指定的值。 要查找 magnitude < 9所在的攻击,请使用以下语法:

/api/siem/offenses?filter=magnitude%20%3C%209

<= 标识小于或等于指定的值。 要查找 id <= 1004所在的攻击,请使用以下语法:

/api/asset_model/properties?filter=id%20%3C%3D%201004

>= 标识大于或等于指定的值。

要查找 scanProfileId >= 3所在的攻击,请使用以下语法:

/api/scanner/scanprofiles?filter=scanProfileId%20%3E%3D%203

!=,

<>,

^=

标识不等于指定的值。

以下示例过滤所有不等于 5 的标识:

/api/siem/offenses?filter=id%20!%3D%205

/api/siem/offenses?filter=id%20%3C%3E%205

/api/siem/offenses?filter=id%20%5E%3D%205

in 标识至少等于列表中的一个指定值。 语法: id in (1001,1111,1200)

示例: /api/asset_model/assets?filter=id%20in%20(1001%2C1111%2C1200)

not in 标识不等于列表中的任何指定值。 语法: id not in (1001,1002,1003):

示例: /api/asset_model/saved_searches?filter=id%20not%20in%20(14%2C20%2C1003)

between … and … 标识介于两个指定值之间。 语法: id between 0 and 3:

示例: /api/siem/offenses?filter=id%20between%200%20and%203

not between … and … 标识不在两个指定值之间。 语法: id not between 30 and 31:

示例: /api/siem/offenses?filter=id%20not%20between%2030%20and%2031

is null 标识为空。 语法: assigned_to is null:

示例: /api/siem/offenses?filter=assigned_to%20is%20null

is not null 标识不为空。 语法: assigned_to is not null:

示例: /api/siem/offenses?filter=assigned_to%20is%20not%20null

空值和比较运算符

当过滤的字段具有 "null" 值时,比较运算符的行为方式如下所示:

"="、">"、">="、"<"、"<="、"IN "和 "BETWEEN "运算符总是返回 false。
"!="、"<>"、"^="、"NOT BETWEEN "和 "NOT IN "总是返回 true。

测试空值的最佳方法是使用 "is null" 或 "is not null" 运算符。

逻辑运算符

使用逻辑运算符 ORANDNOT 对子表达式执行逻辑操作。 下表提供了如何在过滤器中使用逻辑运算符的示例。

运算符 描述 示例
or 对两个子表达式执行逻辑 OR 操作。 子表达式可以是比较节点或其他逻辑节点。 assigned_to 不为空或 id = 111:

/api/siem/offenses?filter=assigned_to%20is%20not%20null%20or%20id%20%3D%20111

and 对两个子表达式执行逻辑 AND 操作。 子表达式可以是比较节点或其他逻辑节点。 assigned_to 不为空且 id = 111:

/api/siem/offenses?filter=assigned_to%20is%20not%20null%20and%20id%20%3D%20111

not 对子表达式执行逻辑 NOT 操作。 protected =true and not id in (111,112,113)

/api/siem/offenses?filter=protected%20%3D%20true%20and%20not%20id%20in%20(111%2C112%2C113)

指定用于比较的 JSON 字段

下表说明如何指定 JSON 字段以用于过滤器中的比较运算符。

JSON 字段示例 描述 示例
{
"name": "Proprietary Data",
"element_type": "ALN"
}
将过滤器直接应用于返回的对象中的字段时,将按名称指定该字段。

name = "Proprietary Data"

GET /api/reference_data/sets?filter=name%20%3D%20%22Proprietary%20Data%22

{
 "description": "String",
 "duration": {
  "days": 42,
  "hours": 42,
  "minutes": 42,
  "months": 42,
  "seconds": 42.5,
  "years": 42
  }
}

将过滤器应用于嵌套在子对象中的字段时,请使用方括号来指定内部字段。

duration(days) >= 20

GET /api/scanner/scanprofiles?filter=duration(days)%20%3E%3D%201

["events","flows","simarc"]
对于不存在字段标签 (例如,字符串,数字或布尔值) 的简单 JSON 类型,请使用 . 运算符。

.= events

GET /api/ariel/databases?filter=.%3D%20events

在过滤器中指定字符串和数字值

对具有非字母数字字符的值的字符串进行过滤时,必须将目标字符串括在引号中。 对数字值进行过滤时,数字值可以遵循以下条件:

  • 以前导 + 或-sign 开头。
  • 包含或以小数点开头。
  • 使用 e 表示法包含指数。

使用 CONTAINS 运算符过滤复杂对象

您可以使用 CONTAINS 运算符来过滤复杂对象。 使用 CONTAINS 运算符来测试列表或映射的内容。 在运算符左侧,是标准格式的标识,例如 x (y (z))。 标识必须引用作为列表,映射或集合的元素。 运算符右侧是一个表达式,用于指定必须如何匹配列表中的对象。 有两个使用 CONTAINS 运算符的基本用例:

  • 检查的列表包含字符串或数字之类的简单元素。
  • 该列表包含复杂对象。
包含简单类型的列表
对于包含简单类型 (例如字符串或数字) 的列表,表达式是同一类型的值。 对于单一比较,不需要方括号。

要仅请求将 ftp 作为过滤器的值字段中的字符串的资产保存的搜索,请执行以下操作:

GET /api/asset_model/saved_searches?filter=filters%20contains%20value%20%3D%20ftp

要请求接口包含 IP 地址 "192.0.2.0" 的资产:

GET /api/asset_model/assets?filter=interfaces%20contains%20ip_addresses%20contains%20value%20%3D%20%192.0.2.0%22

包含复杂对象的列表

对于包含复杂对象的列表,表达式是列表中对象的完整过滤表达式。 此子过滤器表达式使用与任何其他过滤器相同的语法。 您可以使用子过滤器中的任何运算符来测试原始列表中的子列表。 此表达式中的标识与 CONTAINS 运算符正在对其进行操作的列表中的对象相关。 在复杂子过滤器表达式中,需要方括号。

要仅请求具有字段 value = 14Greater than 运算符的资产,请应用过滤器 filters contains (value = 14 or operator = "Greater than")。 此过滤器返回列表中的第一个和最后一个元素。

GET /api/asset_model/saved_searches?filter=filters%20contains%20(value%20%3D%2014%20and%20operator%20%3D%20%22Greater%20than%22)

要查找包含标识值小于 3 的源地址的攻击,请应用以下过滤器:

GET /api/siem/offenses?filter=source_address_ids%20contains%20(.%3C3)

LIKE 运算符

使用 LIKE 运算符来检索部分字符串匹配项。

LIKE 运算符使用以下格式: identifier like "expression"。 表达式周围的引号是必需的。 支持单引号和双引号。 LIKE 关键字执行区分大小写的匹配。

支持以下通配符。 如果在字符串中使用通配符,那么必须对其进行转义。

通配符 描述
% 匹配由零个或多个字符组成的字符串
_ 与任何单个字符匹配
例如,考虑返回以下数据集合的 API:
GET /path/to/api
[
 {
 "hostname": "server.domain1"
 },
 {
 "hostname": "server.domain2"
 },
 {
 "hostname": "SERVER.domain"
 },
 {
 "hostname": "server.DOMAIN"
 }
]

您可以在同一表达式中组合通配符。 例如,要在 domain1domain2中查找服务器,请使用表达式: hostname LIKE "%.domain_"

GET /path/to/api?filter=hostname%20LIKE%20%22%25.domain_%22 
[
 {
 "hostname": "server.domain1"
 },
 {
 "hostname": "server.domain2"
 }
]

请注意,未返回 SERVER.domain ,因为下划线 (_) 没有匹配的尾部字符。

ILIKE 运算符

使用 ILIKE 运算符来检索不区分大小写的部分字符串匹配。

ILIKE 运算符类似于 LIKE 运算符,但不区分大小写。 例如,考虑返回以下数据集合的 API:
GET /path/to/api
[
 {
 "hostname": "server.domain1"
 },
 {
 "hostname": "server.domain2"
 },
 {
 "hostname": "SERVER.domain"
 },
 {
 "hostname": "server.DOMAIN"
 }
] 
使用表达式 hostname ILIKE "server.domain" 的过滤器将生成以下数据集合:
GET /path/to/api?filter=hostname%20ILIKE%20%22server.domain%22'
[
 {
 "hostname": "SERVER.domain"
 },
 {
 "hostname": "server.DOMAIN"
 }
]