当前位置: 首页 > 知识库问答 >
问题:

Drools Fusion滑动窗口样本不工作

楚洋
2023-03-14

我是一个流口水的新手,正在尝试滑动窗口的概念。

我的问题是检测两个销售事件中是否至少发生了成功的交易。我总是以“一次销售发生了两次事件”的形式得到结果,即使这样的事件是否发生过。

-------------drl公司----------

declare Sale
@role( event )
end

rule "Identify more than a single valid sale event"

//The variable saleHappened would be set to Y if a successful transaction

when sale: Sale ( saleHappened == "Y")  over window:length(2)  from entry-point MyEntryPoint

then

System.out.println("A sale has happened over 2 events" );

end

-------------代码----------

public class DroolsTest {

    public static final void main(String[] args) {
        try {

            // load up the knowledge base 
            KnowledgeBase kbase = readKnowledgeBase(); 

            StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); 

            WorkingMemoryEntryPoint entryPoint = ksession.getWorkingMemoryEntryPoint("MyEntryPoint");


            Sale sale = new Sale();

            sale.setSaleHappened("N");
            entryPoint.insert(sale);


            Sale sale2 = new Sale();

            sale2.setSaleHappened("N");
            entryPoint.insert(sale2);


            ksession.fireAllRules();

            ksession.dispose(); 

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }


    private static KnowledgeBase readKnowledgeBase() throws Exception {

        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
        kbuilder.add(ResourceFactory.newClassPathResource("Sample.drl"), ResourceType.DRL); 
        KnowledgeBuilderErrors errors = kbuilder.getErrors(); 
        if (errors.size() > 0) { 
                for (KnowledgeBuilderError error: errors) { 
                        System.err.println(error); 
                } 
                throw new IllegalArgumentException("Could not parse knowledge."); 
        } 

        final KnowledgeBaseConfiguration kbConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(); 
        kbConfig.setOption(EventProcessingOption.STREAM); 
        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(kbConfig); 
        kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 
        return kbase; 
    }

    public static class Sale {

        public Sale () {

        }

        public String getSaleHappened() {
            return saleHappened;
        }

        public void setSaleHappened(String saleHappened) {
            this.saleHappened = saleHappened;
        }

        private String saleHappened;




    }

}

共有1个答案

柴昆杰
2023-03-14

这与Bug 787118有关-长度滑动窗口保留所有事件。在bugzilla条目中解释了滑动窗口事件触发的概念以及事件如何不会从窗口中掉下来。

可按如下方式固定:

--------------drl--------------------

declare Sale
@role( event )
end

declare window Ticks
    Sale()
        over window:length( 5 )
        from entry-point MyEntryPoint
end


rule "More than 2 sale suceess in 5 events"
when     Number($cnt : intValue,intValue > 2) 
from    accumulate( Sale ( saleHappened == "Y" ) from window Ticks,  count(1) )
then
    System.out.println("A sale has happened over " + $cnt +" events" );
end
 类似资料:
  • 假设我有一个每1分钟开始的2小时窗口。下一步是应用GroupBy转换。 如果能解释这一点,我将不胜感激。无法真正找到相关信息

  • 我正在处理一个应用程序,它以透明的锚窗格开始(没有标题栏和圆角)。我想要能够拖动和移动窗口周围。我已经让它工作了,但是当我点击它时,窗口会向上弹到你从中心拖动的地方,而不是你点击的地方。 CSS: main.java: 控制器: 我有一种感觉,我需要说明光标在哪里,但我不确定如何。我是正确的还是我遗漏了一些更容易的东西?

  • 介绍 将TCP与UDP这样的简单传输协议区分开来的是它传输数据的质量。TCP对于发送数据进行跟踪,这种数据管理需要协议有以下两大关键功能: 可靠性:保证数据确实到达目的地。如果未到达,能够发现并重传。 数据流控:管理数据的发送速率,以使接收设备不致于过载。 要完成这些任务,整个协议操作是围绕滑动窗口确认机制来进行的。因此,理解了滑动窗口,也就是理解了TCP。 更多信息 TCP面向流的滑动窗口确认机

  • NowCoder 题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。 例如,如果输入数组 {2, 3, 4, 2, 6, 2, 5, 1} 及滑动窗口的大小 3,那么一共存在 6 个滑动窗口,他们的最大值分别为 {4, 4, 6, 6, 6, 5}。 解题思路 // java public ArrayList maxInWindows(int[] num, int size)

  • 问题内容: 我需要一个滚动窗口(也称为滑动窗口)可在序列/迭代器/生成器上使用。默认的Python迭代可视为一种特殊情况,其中窗口长度为1。我目前正在使用以下代码。有没有人有一个更蟒蛇,更少冗长,或更有效的方法来做这件事? 问题答案: 117 Python文档的旧版本中有一个带有示例: 文档中的一个更为简洁,我想它可以起到更大的作用。

  • 实现滑动窗口我写了这样的: 执行此代码将打印: 我正在尝试修改,以便每个窗口之间没有重叠,这样大小为3的滑动窗口将返回: 我想我需要修改<code>start</code>,使其指向下一个窗口,但我不确定如何使用流来实现这一点。