[
https://issues.apache.org/jira/browse/FLINK-27456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17685146#comment-17685146
]
Juntao Hu commented on FLINK-27456:
-----------------------------------
Hi [~danderson] , the example uses relaxed contiguity between different
patterns("a" followedByAny "b+" followedBy "c") and the default after-match
NO_SKIP strategy for DataStream API. I ran the program and found out the result
is fine, would you like to double check?
> mistake and confusion with CEP example in docs
> ----------------------------------------------
>
> Key: FLINK-27456
> URL: https://issues.apache.org/jira/browse/FLINK-27456
> Project: Flink
> Issue Type: Bug
> Components: Documentation, Library / CEP
> Affects Versions: 1.14.4
> Reporter: David Anderson
> Priority: Major
>
> [https://nightlies.apache.org/flink/flink-docs-master/docs/libs/cep/#contiguity-within-looping-patterns]
> In the section of the docs on contiguity within looping patterns, what it
> says about strict contiguity for the given example is either incorrect or
> very confusing (or both). It doesn't help that the example code doesn't
> precisely match the scenario described in the text.
> To study this, I implemented the example in the text and find it produces no
> output for strict contiguity (as I expected), which contradicts what the text
> says.
> {code:java}
> public class StreamingJob {
> public static void main(String[] args) throws Exception {
> StreamExecutionEnvironment env =
> StreamExecutionEnvironment.getExecutionEnvironment();
> DataStream<String> events = env.fromElements("a", "b1", "d1", "b2",
> "d2", "b3", "c");
> AfterMatchSkipStrategy skipStrategy =
> AfterMatchSkipStrategy.skipPastLastEvent();
> Pattern<String, String> pattern =
> Pattern.<String>begin("a", skipStrategy)
> .where(
> new SimpleCondition<String>() {
> @Override
> public boolean filter(String element)
> throws Exception {
> return element.startsWith("a");
> }
> })
> .next("b+")
> .where(
> new SimpleCondition<String>() {
> @Override
> public boolean filter(String element)
> throws Exception {
> return element.startsWith("b");
> }
> })
> .oneOrMore().consecutive()
> .next("c")
> .where(
> new SimpleCondition<String>() {
> @Override
> public boolean filter(String element)
> throws Exception {
> return element.startsWith("c");
> }
> });
> PatternStream<String> patternStream = CEP.pattern(events,
> pattern).inProcessingTime();
> patternStream.select(new SelectSegment()).addSink(new
> PrintSinkFunction<>(true));
> env.execute();
> }
> public static class SelectSegment implements
> PatternSelectFunction<String, String> {
> public String select(Map<String, List<String>> pattern) {
> return String.join("", pattern.get("a"))
> + String.join("", pattern.get("b+"))
> + String.join("", pattern.get("c"));
> }
> }
> }
> {code}
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)