Drools - 检查 wm 中是否有多个具有不同属性的事件

Drools - Check if there are multiple events with different properties in wm

我需要有关为 Drools 编写检查不同值的规则的建议。

我有这样一个事件:

public class Event {
    int propertyA;
    String propertyB;
}

并且我想检查工作内存中是否有 Event 以便它们的 propertyA 值相同,但它们有 4+ 个不同的 propertyB 值。

例如:如果 Event 是一个用户,propertyA 是它的 ID,propertyB 是 T 恤颜色,我会问:如果有一个用户谁穿了超过或等于 (>=) 4 种不同颜色的 T 恤。

如何实施此规则?谢谢!

找到一个具有特定A的事件,然后从具有该A的所有事件中收集B的集合。

$e: Event( $a: propertyA )   // $e ist the last of a group of As
not Event( this after $e, propertyA == $a ) 
accumulate( Event( propertyA == $a, $b: propertyB );
            $set: collectSet( $b );
            $set.size() >= 4 )