使用greedy
val env = StreamExecutionEnvironment.getExecutionEnvironment
val input = env.fromElements("a", "aa", "aaa","bbb","ccc","cc") val pattern = Pattern.begin[String]("a-label").where(s => s.startsWith("a")).oneOrMore .next("b-label").where(s => s.length==3).oneOrMore.greedy .next("c-label").where(s=> s.startsWith("c")) val patternStream = CEP.pattern(input, pattern) patternStream.select(map=>{ val a = map.get("a-label").get val b = map.get("b-label").get val c = map.get("c-label").get s"$a-$b-$c" }).print()
env.execute()
结果:
7> Buffer(aaa) - Buffer(bbb, ccc)-Buffer(cc)
4> Buffer(a, aa) - Buffer(aaa, bbb, ccc)-Buffer(cc)
6> Buffer(aa) - Buffer(aaa, bbb, ccc)-Buffer(cc)
5> Buffer(aa, aaa) - Buffer(bbb, ccc)-Buf