0

同じ値を持つ 5 つのファクト (過去 7 日間で同じ値を持つ 5 つのファクト) があるかどうかをチェックするルールがあります。今、私は 40 個のファクトを扱っているので、ルールは 40 個のファクトに対してこの問題をチェックします。トップ20では問題ありませんが、毎回時間がかかります. Java が OutOfMemory 例外を送信するため、21 は実行されません。

これが私のルールです:

rule "MUL_04"
no-loop true
when

    r_A:Fact(viewed==false)
    r_B:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7)
    r_C:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_C)
    r_D:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_C!=r_D, r_B!=r_D)
    r_E:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_E, r_C!=r_E, r_D!=r_E)
    r_F:Fact(viewed==true, INT_IP==r_A.INT_IP, Tools.check(SOL_FEC, r_A.SOL_FEC)<=7, r_B!=r_F, r_C!=r_F, r_D!=r_F, r_E!=r_F)


then
        modify (r_A) {
        setViewed(true),
        setEST_EST_FRA(1),
        setEST_PRO_EST(1)
    }
end

Java メモリの問題を修正する方法、またはこのルールを最適化する方法を知っている人はいますか?

少し早いですがお礼を

アップデート::

私はこのクエリでテストしています:

   query multipleRequests(Fact r_A, Integer exits)
    $exits := Number(intValue>=5) from accumulate(
         r_B:Fact(viewed==true,INT_IP == r_A.INT_IP,Tools.check(SOL_FEC, r_A.SOL_FEC) <=7),
         count(r_B)
         )
end

そして、このルール:

rule "MUL_04_WithQuery"
no-loop true
when
    r_A:Fact(viewed==false)
    $numbers : multipleRequests(r_A;)    
then
        modify (r_A) {
            setViewed(true),
            setEST_EST_FRA(1),
            setEST_PRO_EST(1)
        }
end

しかし、期待したパフォーマンスを得ることができません。また、100 を超えるファクトを試してみると、Java ヒープの問題も発生します。

理解できない。私の問題に対する正しいクエリですか???

4

1 に答える 1