如何检测涉及多个无序条件的模式

How to detect patterns involving multiple unordered conditions

假设我想检测这样的模式:

from every A -> B or C or D  # P0, not accepted by Siddhi

其中 B、C 和 D 可以按任何顺序发生。来自文档:

Siddhi can only logically correlate two conditions at a time using keywords such as and, or, and not. When more than two conditions need to be logically correlated, use multiple pattern queries in a chaining manner, at a time correlating two logical conditions and streaming the output to a downstream query to logically correlate the results with other logical conditions.

所以,我想我应该这样做:

from every A -> B  # P1
from every A -> C  # P2
from every A -> D  # P3

但是,上面的重写并不严格等同于原始模式。例如,给定事件顺序

A1 D1 C1 B1

P3在D1之后触发,P2在C1之后触发,P1在B1之后触发,而原来的模式P0只会在D1之后触发一次(假设P0有效)。

同样的,应该如何处理这种形式的模式

from every A -> B and C and D  # not accepted by Siddhi either

一般来说,是否有计划支持同时关联两个以上的条件?否则这些模式的实现会变得非常混乱和容易出错。同时,可以稍微扩展文档以说明如何实现几个简单案例,如本问题中考虑的案例。

感谢您对文档的反馈,我们将在目前正在进行的新 Examples 部分中合并复杂示例

已在 Github

中回答

是的,这是 Siddhi 模式实现中的设计级别限制。有一些改进计划,它在我们的路线图中。

如果您考虑您的示例,(A and B and C) or (D and E and F) 那么您必须编写 5 个模式查询,如下所示。

A and B -> output1
output1 and C -> output2
D and E -> output3
output3 and F -> output4
output2 or output4 -> finalOutput

同样,我们也必须根据需要将查询写入多个子查询。我知道这会增加一些负担,但不幸的是,这是目前唯一的选择。