Apach Flink CEP "At Least" 条件



我正在尝试创建一个与"至少"匹配的 CEP 模式。修改示例代码:

middle.oneOrMore().where(new IterativeCondition<SubEvent>() {
    @Override
    public boolean filter(SubEvent value, Context<SubEvent> ctx) throws Exception {
        if (!value.getName().startsWith("foo")) {
            return false;
        }
        double sum = value.getPrice();
        for (Event event : ctx.getEventsForPattern("middle")) {
            sum += event.getPrice();
        }
        return Double.compare(sum, 5.0) < 0;
    }
});

middle.oneOrMore().where(new IterativeCondition<SubEvent>() {
    @Override
    public boolean filter(SubEvent value, Context<SubEvent> ctx) throws Exception {
        if (!value.getName().startsWith("foo")) {
            return false;
        }
        long count = 0;
        for (Event event : ctx.getEventsForPattern("start")) {
            count = count + 1; 
        }
        return count >= MIN_COUNT;
    }
});

不能解决我的问题,因为条件会一直失败并且永远无法贡献计数。

我在 https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/libs/cep.html 发现 有

// expecting 4 occurrences
 start.times(4);
 // expecting 0 or 4 occurrences
 start.times(4).optional();
 // expecting 1 or more occurrences
 start.oneOrMore();
 // expecting 0 or more occurrences
 start.oneOrMore().optional();

有没有像start.atMinimum(5(这样的东西存在?

查看此链接以获取解决方案。它检查模式是否出现 5 次。您可以在时间(number_of_times(中修改它

[https://stackoverflow.com/questions/45033109/flink-complex-event-processing/45048866]

您可以使用.times(5)后跟相同的模式,但使用量词.oneOrMore().optional()times需要正好 5,zeroOrMore会给你"至少......"。

相关内容

  • 没有找到相关文章

最新更新