在下列情况下,如何在滑动窗口中编写drools规则?

在下列情况下,如何在滑动窗口中编写drools规则?,drools,rules,sliding-window,Drools,Rules,Sliding Window,我是新来的口水融合者。我想写具有以下条件的规则 事件数据通过两个名为“eventId”和“state”的属性定期进入drools引擎。 例如:-“数据”:{“eventId”:“evet123”,“state”:1} 当第一次事件发生时,它存储在工作记忆中 在第一个事件之后,无论发生什么事件,该事件的状态都与前一个事件一起检查,并且前一个事件的状态是否为1,当前事件的状态是否为2。在这种情况下,执行一些函数。当前事件替换为工作内存中的前一个事件 Ex:-如果(先前事件状态为1--->当前事件状态

我是新来的口水融合者。我想写具有以下条件的规则

  • 事件数据通过两个名为“eventId”和“state”的属性定期进入drools引擎。 例如:-
    “数据”:{“eventId”:“evet123”,“state”:1}
  • 当第一次事件发生时,它存储在工作记忆中
  • 在第一个事件之后,无论发生什么事件,该事件的状态都与前一个事件一起检查,并且前一个事件的状态是否为1,当前事件的状态是否为2。在这种情况下,执行一些函数。当前事件替换为工作内存中的前一个事件
  • Ex:-如果(先前事件状态为1--->当前事件状态为2),则调用函数

    注意:-eventId不是唯一的。其可能与前一事件相同或不同

    (在这个场景中可能使用基于长度的滑动窗口,但我不知道如何在规则中转换此请求。)


    请任何drools专家指导我解决这个问题。

    不管你说什么,但你描述的是一系列奇怪的事件:第一个事件的状态为1,接下来的所有事件的状态为2

    rule match12
    when
      $e1: Event( $id: id, state == 1 )
      $e2: Event( id == $id, state == 2 )
    then
      retract( $e1 );
      modify( $e2 ){ setState( 1 ) }
    end
    

    状态=2的数据无限地保留在工作记忆中?您是否希望每个对状态==1/2都发生这种情况,而不管eventId是什么你有任何规则代码吗?到目前为止你尝试了什么?啊,是的,你不能用另一个事实替换一个事实,但你可以收回一个事实。1。假设第一个事件的状态为1,第二个事件的状态为2,则满足规则条件。此规则仅适用于相同的eventID。当此规则满足时,第一个事件将被丢弃,第二个事件将成为第一个事件,因此具有相同id的新事件将与此新的第一个事件id进行比较。谢谢@laune。这对我有帮助。我还有另外一个困难,看看这个。