如何检测涉及多个无序条件的模式
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 部分中合并复杂示例
中回答
是的,这是 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
同样,我们也必须根据需要将查询写入多个子查询。我知道这会增加一些负担,但不幸的是,这是目前唯一的选择。
假设我想检测这样的模式:
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 部分中合并复杂示例
中回答是的,这是 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
同样,我们也必须根据需要将查询写入多个子查询。我知道这会增加一些负担,但不幸的是,这是目前唯一的选择。