Java 阿帕奇·弗林克+;CEP-检测相同的事件

Java 阿帕奇·弗林克+;CEP-检测相同的事件,java,scala,stream,apache-flink,complex-event-processing,Java,Scala,Stream,Apache Flink,Complex Event Processing,我想检测共享相同属性的事件。假设我有一个简单的case类: case class Record(name: String, value: Int) 假设存在以下流: Record("A", 1) Record("B", 2) Record("A", 3) Record("C", 4) 然后我想检测双“A”记录。这可能吗?我现在有这个: val start: Pattern[Record, _] = myStream .begin("first") .followedBy("second").

我想检测共享相同属性的事件。假设我有一个简单的case类:

case class Record(name: String, value: Int)
假设存在以下流:

Record("A", 1)
Record("B", 2)
Record("A", 3)
Record("C", 4)
然后我想检测双“A”记录。这可能吗?我现在有这个:

val start: Pattern[Record, _] = myStream
.begin("first")
.followedBy("second").where(previous_record.name == _.name)

我认为您正在定义什么是事件检测,您是否尝试过:

val start: Pattern[Record, _] = myStream
   .begin("first").where(name == "A")
   .followedBy("second").where(name == "A")
更新:例如:

val patternIG: Pattern[(String,String), _] = Pattern.begin[String,String)]("start").where(_.name == "Ignition").where(_.ac == "ON").next("end").where(_.name == "Door").where(_.ac == "ON")
val patternStream: PatternStream[(String,String)] = CEP.pattern(mystream, patternIG)
def selectFn(pattern : mutable.Map[String,(String,String)]): String = {
val startEvent = pattern.get("start").get
val endEvent = pattern.get("end").get
  "ALERT Door Open"
}
val patternStreamSelected = patternStream.select(selectFn(_)).print()

几乎。这里的问题是“A”是在前面的记录中定义的,所以它是可变的。要在同一个属性上进行检测,您需要很大的存储空间,因为属性集可能是无限的,对于看到的每个属性,您都需要存储。如果特性集受到限制,则可以应用过滤。