有没有办法丢弃部分匹配项?

Is there a way to discard partial matches?

我正在监视车辆的移动。每当他们进入或离开地理围栏时,都会触发一个事件。通过 Flink 我想检查车辆是否在围栏内至少 2 小时。

这是我正在使用的模式:

begin("enter").notFollowedBy("exit").within(Time.hours(2)).followedBy("final-exit")

问题是:即使 notFollowed“exit”为真,部分“enter”匹配仍然有效,即如果车辆 returns 几天后触发另一个 exit-Fence 事件,它通过 notFollowedBy 规则并导致完全匹配。

有没有办法让Flink主动丢弃部分匹配?

从逻辑上讲,如果两天内没有跟随“退出”,则部分“进入”匹配保持有效是有道理的,因为在这种情况下,它没有在两小时内跟随“退出”。你能描述一下在什么情况下你希望这样的部分匹配超时吗?例如,如果您希望它在 8 小时后超时,那么我认为该行为可以描述为

begin("enter")
  .notFollowedBy("exit").within(Time.hours(2))
  .followedBy("final-exit").within(Time.hours(8))

更新

如果您的 objective 是过滤掉所有车辆在 2 小时内进入和离开地理围栏的情况,然后正确处理剩余的事件,那么您可以 运行 一个具有两个阶段。第一阶段可以描述为

begin("enter")
  .followedBy("quick-exit").within(Time.hours(2))

然后你可以丢弃匹配这个模式的事件,并对那些超时的事件做进一步的处理。有关如何使用 processTimedOutMatch 捕获和发出超时部分模式的详细信息,请参阅 Handling Timed Out Partial Patterns,这些模式将是您要考虑进行进一步处理的部分模式。