2014-02-15 49 views
1

我需要編寫一條規則,用於統計在最近10秒內我在流中收到的事實數量,如果它們符合特定條件。使用Drools Fusion計算滑動窗口中的事實數量

因此,例如,如果2輛黑色汽車在最近10秒內通過交叉路口,我想提醒某人。

我有以下規則:

rule "check black cars in 10 seconds" dialect "java" 
when 

    $car : Car(color == Color.BLACK) over window:time(10s); 
then 

    System.out.println("got something"); 

當我通過在一個黑車這是工作,但是,我不想它開火,除非有2臺黑車。我無法找到一個很好的例子。

謝謝。

回答

1
when 
accumulate(Car(color == Color.BLACK) over window:time(10s); 
      $cnt: count(1); $cnt == 2) 
then 

當第三輛車到達第二輛車的10秒內,但第一輛車後不遲於10秒,但是這就是這將當次車到達的第一輛車的10秒內開火,並再次可以從你的(模糊的)規範中派生出來。

+0

謝謝......這是我正在尋找的! –

+0

所以...試圖理解這個......「$ cnt:count(1)」做了什麼?如果我不想在第一輛汽車通知第三輛後等待10秒鐘,我該怎麼辦? –