FlinkCEP中的AfterMatchSkipStrategy无法应用

时间:2018-09-20 10:06:11

标签: java apache-flink flink-cep

我正在尝试将AfterMatchSkipStrategy skipPastLastEvent()应用到我的模式中。但是问题是,我得到的结果与不应用skipstrategy (NoSkip)时的结果相同。

丢弃在比赛开始之后但结束之前开始的所有部分比赛,这是跳过策略SKIP_PAST_LAST_EVENT的描述。据我所知,一旦匹配模式,所有部分匹配都将被丢弃。

AfterMatchSkipStrategy skipStrategy = AfterMatchSkipStrategy.skipPastLastEvent();
Pattern<GraphMap, ? > pattern2 = Pattern.<GraphMap>begin("start", skipStrategy).where(new IterativeCondition<GraphMap>() {
        @Override
        public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
            if (graphMap.getSubjectValue().equals("basketballplayer1"))
                return graphMap.getObjectValueString().equals("Miss");
            return false;
        }
    }).followedBy("middle").where(new IterativeCondition<GraphMap>() {
        @Override
        public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
            for( GraphMap previousGraphMap : context.getEventsForPattern("start")){
                if (graphMap.getSubjectValue().equals(previousGraphMap.getSubjectValue())){
                    return graphMap.getObjectValueString().equals("Basket");
                }
            }
            return false;
        }
    }).oneOrMore().followedBy("end").where(new IterativeCondition<GraphMap>() {
        @Override
        public boolean filter(GraphMap graphMap, Context<GraphMap> context) throws Exception {
            for ( GraphMap previousGraphMap : context.getEventsForPattern("middle")){
                if( graphMap.getSubjectValue().equals(previousGraphMap.getSubjectValue())){
                    return graphMap.getObjectValueString().equals("Miss");
                }
            }
            return false;
        }
    }).within(Time.seconds(10))

以上是我的图案序列。在这种情况下,我需要的输出是篮球运动员1的(小姐篮+小姐)序列。但是当我输入

Miss, Miss, Basket, Basket, Miss

我正在获得所有匹配项:

[Miss, Basket, Basket, Miss] , 
[Miss, Basket, Miss]
[Miss, Basket, Miss] {of the second miss in the sequence} etc. 

我在做错什么吗?我想要的输出仅为[Miss, Basket, Basket, Miss],并非NoSkip中的所有其他模式都能给我。

在此先感谢您的答复。这将是巨大的帮助。

0 个答案:

没有答案