Github user tzulitai commented on a diff in the pull request:
https://github.com/apache/flink/pull/4041#discussion_r119606506
--- Diff: docs/dev/libs/cep.md ---
@@ -98,48 +128,105 @@ val result: DataStream[Alert] =
patternStream.select(createAlert(_))
</div>
</div>
-Note that we use Java 8 lambdas in our Java code examples to make them
more succinct.
-
## The Pattern API
-The pattern API allows you to quickly define complex event patterns.
-
-Each pattern consists of multiple stages or what we call states.
-In order to go from one state to the next, the user can specify conditions.
-These conditions can be the contiguity of events or a filter condition on
an event.
-
-Each pattern has to start with an initial state:
+The pattern API allows you to quickly define complex pattern sequences
that you want to extract
+from your input stream.
+
+Each such complex pattern sequence consists of multiple simple patterns,
i.e. patterns looking for
+individual events with the same properties. These simple patterns are
called **states**. A complex pattern
+can be seen as a graph of such states, where transition from one state to
the next happens based on user-specified
+*conditions*, e.g. `event.getName().equals("start")`. A *match* is a
sequence of input events which visit all
+states of the complex pattern graph, through a sequence of valid state
transitions.
+
+<span class="label label-danger">Attention</span> Each state must have a
unique name to identify the matched
+events later on.
+
+<span class="label label-danger">Attention</span> State names **CANNOT**
contain the character `:`.
+
+In the remainder, we start by describing how to define [States](#states),
before describing how you can
+combine individual states into [Complex Patterns](#combining-states).
+
+### Individual States
+
+A **State** can be either a *singleton* state, or a *looping* one.
Singleton states accept a single event,
+while looping ones accept more than one. In pattern matching symbols, in
the pattern `a b+ c? d` (or `a`,
+followed by *one or more* `b`'s, optionally followed by a `c`, followed by
a `d`), `a`, `c?`, and `d` are
+singleton patterns, while `b+` is a looping one (see
[Quantifiers](#quantifiers)). In addition, each state
+can have one or more *conditions* based on which it accepts events (see
[Conditions](#conditions)).
--- End diff --
Perhaps somewhere in this paragraph, describe that by default, states are
singleton? and to make it a looping one, use quantifiers.
There is a sentence mentioning for looping state see quantifiers, but we
can make the information a bit more explicit.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---