0

我有两种事件类型(A 和 B)。我想编写一个模式来检测在具有相同 id: 的A事件之后发生的每个B事件。但是,它应该是不同的 ID。换句话说,模式应该忽略第一个之后的所有具有相同 id 的A事件,直到上面的表达式为真,意味着具有相同 id 的B事件来了。every A -> B (A.id = B.id)

例如,假设这是一个事件流:

1. A (id: 1); 2. A(id: 2); 3. A (id: 3); 4. A(id: 1); 5. A (id: 2); 6. B (id: 1); 7. B (id: 2); 8. A (id: 1); 9. B(id: 3); 10. A (id: 1); 11. B (id: 1)

该模式应忽略事件 No4,因为它与事件 No1 具有相同的 id。当事件 No6 到来时,模式应该匹配1. A (id: 1) -> 6. B (id: 1)。然后,该模式应该允许 id=1 的新A事件。因此不应忽略事件 No8,但应忽略事件 No10。当事件 No11 到来时,模式应该再次匹配8. A(id: 1) -> 11. B(id: 1)

此外,事件No2 应该匹配事件No7,事件No3 应该匹配事件No9。

我曾尝试使用EVERY-DISTINCT(A.id) A -> B (A.id=B.id),但它会忽略第一个之后具有相同 id 的所有A事件。然后我尝试EVERY (A -> B (A.id = B.id))了,但它也不起作用,因为它忽略了所有A事件而不管 id 直到具有相同 id 的B事件出现。

4

1 回答 1

1

您可以every A -> B (A.id = B.id)在语句中添加语句,并在关键字之后PATTERN添加额外的添加。@SuppressOverlappingMatchesPATTERN

完整的声明将是这样的:

SELECT b.id FROM PATTERN @SuppressOverlappingMatches [every a=A -> b=B (a.id = b.id)] 

参考:http ://www.espertech.com/esper/release-5.5.0/esper-reference/html/event_patterns.html#patterns-howto-suppress

于 2016-12-15T10:17:17.790 回答