
# 过滤规则参数说明
事件源产生的事件与过滤规则进行匹配，匹配成功后事件才会被路由到与过滤规则关联的事件目标。过滤规则必须和匹配的事件具有相同的结构。
本章节介绍过滤规则和事件匹配时的规则，以及构成过滤规则的参数：运算操作符、条件表达式和匹配字段。
#### 匹配规则
过滤规则和事件匹配时，需要遵循以下规则：
- 顶级匹配字段只支持source、type、subject、data。
- 顶级匹配必须包括source字段，且source只支持StringIn操作符。
- data字段最多支持5个任意匹配字段，每个匹配字段最多嵌套5级。
- 每个匹配字段的匹配条件最多支持5个，多个匹配条件间是"或"的关系。
- 多个匹配字段间是"并且"的关系。
- 同一层级相同的匹配字段定义多次，则以最后一次为准。
 
#### 运算操作符
过滤规则和事件匹配时，使用的运算操作符如[表1]所示。
 表1运算操作符列表 
| 操作符                  | 输入值               | 条件值                   | 说明                    |
|:---|:---|:---|:---|
| StringIn             | String/String\[\] | String\[\] values     | 检查输入值是否与任一条件值完全匹配     |
| StringNotIn          | String/String\[\] | String\[\] values     | 检查输入值是否与所有条件值都不匹配     |
| StringStartsWith     | String/String\[\] | String\[\] values     | 检查输入值是否与任一条件值前缀匹配     |
| StringNotStartsWith  | String/String\[\] | String\[\] values     | 检查输入值是否与所有条件值前缀都不匹配   |
| StringEndsWith       | String/String\[\] | String\[\] values     | 检查输入值是否与任一条件值后缀匹配     |
| StringNotEndsWith    | String/String\[\] | String\[\] values     | 检查输入值是否与所有条件值后缀都不匹配   |
| NumberIn             | Number/Number\[\] | Number\[\] values     | 检查输入值是否与任一条件值完全匹配     |
| NumberNotIn          | Number/Number\[\] | Number\[\] values     | 检查输入值是否与所有条件值都不匹配     |
| NumberLessThan       | Number/Number\[\] | Number value          | 检查输入值是否与小于条件值         |
| NumberNotLessThan    | Number/Number\[\] | Number value          | 检查输入值是否与不小于（大于或等于）条件值 |
| NumberGreaterThan    | Number/Number\[\] | Number value          | 检查输入值是否与大于条件值         |
| NumberNotGreaterThan | Number/Number\[\] | Number value          | 检查输入值是否与不大于（小于或等于）条件值 |
| NumberInRange        | Number/Number\[\] | Number\[\]\[\] values | 检查输入值是否在任一条件范围内       |
| NumberNotInRange     | Number/Number\[\] | Number\[\]\[\] values | 检查输入值是否不在任一条件范围内      |
| IsNull               | -                 | 无                     | 检查输入值是否为null或未定义      |
| IsNotNull            | -                 | 无                     | 检查输入值是否不为null或未定义     |
| IsTrue               | Boolean           | 无                     | 检查输入值是否为true          |
| IsNotTrue            | Boolean           | 无                     | 检查输入值是否不为true，即false  |
   
#### 条件表达式
过滤规则和事件匹配时，使用的条件表达式如[表2]所示。
 表2条件表达式列表 
| 字段名    | 类型         | 必选 | 说明               |
|:---|:---|:---|:---|
| op     | String     | 是  | 运算操作符            |
| value  | JSON Type  | 否  | 运算符为单值比较时，操作条件值  |
| values | JSON Array | 否  | 运算符为范围比较时，操作条件范围 |
   
#### 匹配字段
过滤规则和事件匹配时，使用的匹配字段如[表3]所示。
 表3匹配字段列表 
| 字段名     | 条件值类型    | 示例说明                                                                                                                            |
|:---|:---|:---|
| source  | JSON对象数组 | 事件源，条件值位于JSON数组中，source字段只支持"StringIn" 示例: \[{"op": "StringIn", "values": \["HC.OBS"\]}\]           |
| type    | JSON对象数组 | 事件类型，条件值位于JSON数组中 示例: \[{"op": "StringIn", "values": \["object:put"\]}\]                             |
| subject | JSON对象数组 | 事件主体，条件值位于JSON数组中 示例: \[{"op": "StringEndsWith", "values": \[".jpg"\]}\]                              |
| data    | JSON对象   | 事件数据，条件值位于JSON对象中，条件值为子匹配字段，支持最多5层嵌套结构 示例: {"state": \[{"op": "StringIn", "values": \["running"\]}\] |
   
