85.6. 事件时序算子
在流模式中,决策引擎支持以下时序运算符,这些事件插入到决策引擎的工作内存中。您可以使用这些运算符来定义您在 Java 类或 DRL 规则文件中声明的事件行为的时序原因。当决策引擎以云模式运行时,不支持临时运算符。
-
之后
-
before
-
coincides
-
期间
-
includes
-
完成
-
完成于
-
meets
-
达到的
-
重叠
-
重叠,
-
Starting
启动者
- 之后
此 operator 指定在关联事件后当前事件是否发生。此运算符也可以定义在相关事件后面可以达到相关事件的时间,或者当前事件可在关联事件之后达到限额的时间范围。
例如,如果
$eventA
在 3 分钟和 30 秒之间启动,则以下模式匹配,在$eventB
完成后为 4 分钟。如果$eventA
早于 3 分钟,且 30 秒在$eventB
$eventA : EventA(this after[3m30s, 4m] $eventB)
您还可以以以下方式表达此 operator:
3m30s <= $eventA.startTimestamp - $eventB.endTimeStamp <= 4m
after
operator 支持最多两个参数值:- 如果定义了两个值,则间隔在第一个值(示例中为 3 分钟和 30 秒)开始,并以第二个值结束(示例中为 4 分钟)。
- 如果只定义一个值,则间隔在提供的值启动,并无限期地运行,且不会出现结束时间。
- 如果没有定义值,则间隔以 1 毫秒开始,且无限期地运行,且没有结束时间。
after
operator 还支持负时间范围:$eventA : EventA(this after[-3m30s, -2m] $eventB)
如果第一个值大于第二个值,则决策引擎会自动逆向。例如,决策引擎以相同的方式解释以下两种模式:
$eventA : EventA(this after[-3m30s, -2m] $eventB) $eventA : EventA(this after[-2m, -3m30s] $eventB)
- before
此运算符指定当前事件是否在关联事件之前发生。此运算符也可以定义在关联事件之前当前事件的时长,或当前事件在关联事件之前可以达到无限的时间范围。
例如,如果
$eventA
在 3 分钟到 30 秒到 4 分钟之间完成,则以下模式匹配,在$eventB
开始前 4 分钟。如果$eventA
在前 3 分钟和 30 秒前为$eventB
开始前,或超过 4 分钟,则在$eventB
开始前,该模式不会被匹配。$eventA : EventA(this before[3m30s, 4m] $eventB)
您还可以以以下方式表达此 operator:
3m30s <= $eventB.startTimestamp - $eventA.endTimeStamp <= 4m
before
operator 支持最多两个参数值:- 如果定义了两个值,则间隔在第一个值(示例中为 3 分钟和 30 秒)开始,并以第二个值结束(示例中为 4 分钟)。
- 如果只定义一个值,则间隔在提供的值启动,并无限期地运行,且不会出现结束时间。
- 如果没有定义值,则间隔以 1 毫秒开始,且无限期地运行,且没有结束时间。
before
operator 还支持负时间范围:$eventA : EventA(this before[-3m30s, -2m] $eventB)
如果第一个值大于第二个值,则决策引擎会自动逆向。例如,决策引擎以相同的方式解释以下两种模式:
$eventA : EventA(this before[-3m30s, -2m] $eventB) $eventA : EventA(this before[-2m, -3m30s] $eventB)
- coincides
此 operator 指定两个事件是否同时发生,且是相同的开始和结束时间。
例如,如果开始和结束时间戳为
$eventA
和$eventB
,则以下模式匹配:$eventA : EventA(this coincides $eventB)
coincides
operator 支持事件开始和结束时间之间的两个参数值(如果它们不相同):- 如果只给出一个参数,则使用参数 来设置这两个事件的开始和结束时间的阈值。
- 如果给出两个参数,则第一个参数用作开始时间的阈值,第二个参数被用作结束时间的阈值。
以下模式使用 start 和结束时间阈值:
$eventA : EventA(this coincides[15s, 10s] $eventB)
如果满足以下条件,则特征匹配:
abs($eventA.startTimestamp - $eventB.startTimestamp) <= 15s && abs($eventA.endTimestamp - $eventB.endTimestamp) <= 10s
警告决策引擎不支持
coincides
operator 的负间隔。如果您使用负间隔,则决策引擎会生成错误。- 期间
此 operator 指定当前事件是否在关联事件启动和结束的时间范围内发生。当前事件必须在关联事件开始后启动,且必须在关联事件结束前结束。(通过
coincides
运算符,开始和结束时间相同或几乎相同。)例如,如果
$eventA
在$eventB
开始并且在$eventB
结束前结束,则以下模式匹配:$eventA : EventA(this during $eventB)
您还可以以以下方式表达此 operator:
$eventB.startTimestamp < $eventA.startTimestamp <= $eventA.endTimestamp < $eventB.endTimestamp
在 Operator 中,支持一个、两个或四个可选参数:
- 如果定义一个值,这个值是两个事件的开始时间和两个事件结束时间之间的最大距离。
如果定义了两个值,则这些值是一个阈值,当前事件开始时间和结束时间必须与相关事件启动和结束时间相关。
例如,如果值为
5
和10s
,当前事件必须在关联事件开始后 5 到 10 秒之间启动,且必须在关联事件结束前 5 到 10 秒之间结束。- 如果定义了四个值,则第一个值和第二个值是事件开始时间之间的最小和最大距离,第三值和第四个值则是两个事件结束时间之间的最小和最大距离。
- includes
此运算符指定关联事件是否在发生当前事件时的时间段内。相关事件必须在当前事件开始后启动,且必须在当前事件结束前结束。(此运算符的行为是 Operator 行为的反向情况。)
例如,如果
$eventB
在$eventA
启动后启动,且在$eventA
结束前结束,则以下模式匹配:$eventA : EventA(this includes $eventB)
您还可以以以下方式表达此 operator:
$eventA.startTimestamp < $eventB.startTimestamp <= $eventB.endTimestamp < $eventA.endTimestamp
includes
operator 支持一个、两个或四个可选参数:- 如果定义一个值,这个值是两个事件的开始时间和两个事件结束时间之间的最大距离。
如果定义了两个值,则这些值是一个阈值,其中关联了事件开始时间和结束时间必须与当前事件开始和结束时间相关。
例如,如果值为
5
和10s
,相关事件必须在当前事件开始后 5 到 10 秒之间启动,且必须在当前事件结束前 5 到 10 秒之间结束。- 如果定义了四个值,则第一个值和第二个值是事件开始时间之间的最小和最大距离,第三值和第四个值则是两个事件结束时间之间的最小和最大距离。
- 完成
此运算符指定当前事件在关联事件后是否启动,但这两个事件同时结束。
例如,如果
$eventA
在$eventB
启动后启动,则以下模式匹配,并同时在$eventB
结束后结束:$eventA : EventA(this finishes $eventB)
您还可以以以下方式表达此 operator:
$eventB.startTimestamp < $eventA.startTimestamp && $eventA.endTimestamp == $eventB.endTimestamp
完成
Operator 支持一个可选参数,用于设置两个事件结束时间之间的最长时间:$eventA : EventA(this finishes[5s] $eventB)
如果满足这些条件,这个特征匹配:
$eventB.startTimestamp < $eventA.startTimestamp && abs($eventA.endTimestamp - $eventB.endTimestamp) <= 5s
警告决策引擎不支持
完成
Operator 的负间隔。如果您使用负间隔,则决策引擎会生成错误。- 完成于
此运算符指定关联事件是否在当前事件后启动,但两个事件同时结束。(此运算符的行为与
完成
Operator 的行为相反。)例如,如果
$eventB
在$eventA
启动后启动,则以下模式匹配,并同时在$eventA
结束后结束:$eventA : EventA(this finishedby $eventB)
您还可以以以下方式表达此 operator:
$eventA.startTimestamp < $eventB.startTimestamp && $eventA.endTimestamp == $eventB.endTimestamp
Operator
完成
支持一个可选参数,用于设置两个事件结束时间之间的最长时间:$eventA : EventA(this finishedby[5s] $eventB)
如果满足这些条件,这个特征匹配:
$eventA.startTimestamp < $eventB.startTimestamp && abs($eventA.endTimestamp - $eventB.endTimestamp) <= 5s
警告决策引擎不支持 operator
完成
的负间隔。如果您使用负间隔,则决策引擎会生成错误。- meets
此 operator 指定关联事件启动时当前事件是否同时结束。
例如,如果
$eventA
在$eventB
启动时,以下模式匹配:$eventA : EventA(this meets $eventB)
您还可以以以下方式表达此 operator:
abs($eventB.startTimestamp - $eventA.endTimestamp) == 0
meets
operator 支持一个可选参数,用于设置当前事件的结束时间和关联事件的开始时间之间的最长时间:$eventA : EventA(this meets[5s] $eventB)
如果满足这些条件,这个特征匹配:
abs($eventB.startTimestamp - $eventA.endTimestamp) <= 5s
警告决策引擎不支持 meet operator 的负间隔。
如果您使用负间隔,则决策引擎会生成错误。
- 达到的
此运算符指定关联事件在当前事件启动时是否同时结束。(此运算符的行为与 meets 运算符
的行为
相反。)例如,如果
$eventB
在$eventA
启动时同时结束,则以下模式匹配:$eventA : EventA(this metby $eventB)
您还可以以以下方式表达此 operator:
abs($eventA.startTimestamp - $eventB.endTimestamp) == 0
Operator 达到
的可选参数支持一个可选参数,用于设置关联事件结束时间和当前事件的开始时间之间的最大距离:$eventA : EventA(this metby[5s] $eventB)
如果满足这些条件,这个特征匹配:
abs($eventA.startTimestamp - $eventB.endTimestamp) <= 5s
警告决策引擎不支持 operator
达到
的负间隔。如果您使用负间隔,则决策引擎会生成错误。- 重叠
此 operator 指定在关联事件启动前当前事件是否启动,它会在关联事件发生的时间范围内结束。当前事件必须在相关事件的开始和结束时间之间结束。
例如,如果
$eventA
在$eventB
开始前,如果启动了 $eventA,则匹配,然后在$eventB
结束$eventB
时结束:$eventA : EventA(this overlaps $eventB)
重叠
Operator 支持最多两个参数:- 如果定义了参数,则该值是关联事件的开始时间和当前事件的结束时间之间的最大距离。
- 如果定义了两个参数,值为关联事件开始时间和当前事件结束时间之间的最小距离(第一个值)和最大距离(秒数)。
- 重叠,
此运算符指定关联事件是否在当前事件启动前启动,并在当前事件发生的时间范围内结束。相关事件必须在当前事件的开始和结束时间之间结束。(此运算符的行为是
重叠
运算符的行为。)例如,如果在
$eventA
启动时启动$eventB
,则以下模式匹配,然后在$eventA
$eventA : EventA(this overlappedby $eventB)
Operator 重叠
支持最多两个参数:- 如果定义一个参数,则该值是当前事件开始时间和关联事件的结束时间之间的最大距离。
- 如果定义了两个参数,值为当前事件开始时间和关联事件结束时间之间的最小距离(第一个值)和最大距离(秒数)。
- Starting
此运算符指定两个事件是否同时启动,但当前事件在关联事件结束前结束。
例如,如果
$eventA
和$eventB
$eventA
结束 $eventA 结束:$eventA : EventA(this starts $eventB)
您还可以以以下方式表达此 operator:
$eventA.startTimestamp == $eventB.startTimestamp && $eventA.endTimestamp < $eventB.endTimestamp
start operator 支持一个可选参数,用于设置两个事件启动时间之间的最大距离:
$eventA : EventA(this starts[5s] $eventB)
如果满足这些条件,这个特征匹配:
abs($eventA.startTimestamp - $eventB.startTimestamp) <= 5s && $eventA.endTimestamp < $eventB.endTimestamp
警告决策引擎不支持
启动
operator 的负间隔。如果您使用负间隔,则决策引擎会生成错误。- 启动者
此运算符指定两个事件是否同时启动,但关联事件在当前事件结束前结束。(此 Operator 的行为与
启动
Operator 行为相反。)例如,如果
$eventA
和$eventB
同时启动,则以下模式匹配,$eventB
在$eventA
结束前终止:$eventA : EventA(this startedby $eventB)
您还可以以以下方式表达此 operator:
$eventA.startTimestamp == $eventB.startTimestamp && $eventA.endTimestamp > $eventB.endTimestamp
Operator 启动的
一个可选参数支持在两个事件的开始时间之间设置最大距离:$eventA : EventA( this starts[5s] $eventB)
如果满足这些条件,这个特征匹配:
abs( $eventA.startTimestamp - $eventB.startTimestamp ) <= 5s && $eventA.endTimestamp > $eventB.endTimestamp
警告决策引擎不支持 operator
启动
的负间隔。如果您使用负间隔,则决策引擎会生成错误。