AfterMatchSkipStrategy во FlinkCEP не применяется - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь применить 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))

Выше моя последовательность паттернов.В этом случае вывод, который мне требуется, это последовательность (Miss Basket + Miss) баскетболиста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, дали бы мне.

Заранее спасибо за любые ответы.Это было бы огромной помощью.

...