搜索

85.6. 事件时序算子

download PDF

在流模式中,决策引擎支持以下时序运算符,这些事件插入到决策引擎的工作内存中。您可以使用这些运算符来定义您在 Java 类或 DRL 规则文件中声明的事件行为的时序原因。当决策引擎以云模式运行时,不支持临时运算符。

  • 之后
  • before
  • coincides
  • 期间
  • includes
  • 完成
  • 完成于
  • meets
  • 达到的
  • 重叠
  • 重叠,
  • Starting
  • 启动者

    之后

    此 operator 指定在关联事件后当前事件是否发生。此运算符也可以定义在相关事件后面可以达到相关事件的时间,或者当前事件可在关联事件之后达到限额的时间范围。

    例如,如果 $eventA 在 3 分钟和 30 秒之间启动,则以下模式匹配,在 $eventB 完成后为 4 分钟。如果 $eventA 早于 3 分钟,且 30 秒在 $eventB 完成后或超过 4 分钟后启动,则模式不会被匹配。

    $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 中,支持一个、两个或四个可选参数:

    • 如果定义一个值,这个值是两个事件的开始时间和两个事件结束时间之间的最大距离。
    • 如果定义了两个值,则这些值是一个阈值,当前事件开始时间和结束时间必须与相关事件启动和结束时间相关。

      例如,如果值为 510s,当前事件必须在关联事件开始后 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 支持一个、两个或四个可选参数:

    • 如果定义一个值,这个值是两个事件的开始时间和两个事件结束时间之间的最大距离。
    • 如果定义了两个值,则这些值是一个阈值,其中关联了事件开始时间和结束时间必须与当前事件开始和结束时间相关。

      例如,如果值为 510s,相关事件必须在当前事件开始后 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 启动 的负间隔。如果您使用负间隔,则决策引擎会生成错误。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.