Drools Fusion重复数据删除

时间:2014-02-18 10:10:53

标签: drools drools-fusion ignore-duplicates

我定义了一个充当规则引擎事件的类

它有以下成员 电话号码 纬度 经度

我如何制定一条规则 1.该规则计算同一位置的不同人数 2.同一人如果在1分钟间隔内多次穿越同一地点,则应仅计为一次且不应重复

我制定了以下规则,但它似乎没有起作用

import locationbasedservices.LocationEvent;

declare LocationEvent
  @role(event)
  @expires(1m)
end

rule "footfallcount"
when
  LocationEvent ( $msisdn : msisdn )
  $footfallcnt : Number(intValue > 0)
    from accumulate( LocationEvent(latitude=="77.77", longitude=="77.77",
                                   age>31 && <40, arpu>40.00, gender=="MALE")
                       from entry-point LocationSvc,
  not ArrayList( size >= 2 )
    from collect( LocationEvent( msisdn == $msisdn )
                    from entry-point LocationSvc),
          count(1))
then
  System.out.println("Footfall: " + $footfallcnt);
end

有人可以帮忙吗?

此致 Subbu

1 个答案:

答案 0 :(得分:0)

这就是我的想法:

$m2e: Map( $size: size )
        from accumulate ( $le: LocationEvent ( latitude == "77.77", longitude == "77.77",
                                               age > 31 && < 40, arpu > 40.00,
                                               gender == "MALE", $msisdn : msisdn )
                                 over window:time( 1m ),
                          init( Map m2e = new HashMap(); ),
                          action( m2e.put( $msisdn, $le ); ),
                          result( m2e ) )

请仔细注意Drools手册中有关累积的内容:最好在Java代码中开发一个accumulate函数,实现org.drools.core.runtime.rule.TypedAccumulateFunction并使用简单的语法运行它。