Drools - 为消费者排名的 table 产品寻找单一匹配条件

Drools - Finding a single matching condition for a table of products ranked by consumers

我有一个 table 显示商店中排名前四的农产品的信息。我希望能够在此评级 table 中找到特定产品。这是 table

的结构
----------------------------------------------------------------------------
sectId  |    product_code     |   product_category   | consumer_raniking       
10444   |     11222           |   PRODUCE            | RATING_1                     
10444   |     45555           |   PRODUCE            | RATING_1
10444   |     10005           |   PR0DUCE            | RATING_1
20555   |     11344           |   PRODUCE            | RATING_2
20555   |     94003           |   PRODUCE            | RATING_2

...等等。

我写了一条规则来查找插入的产品,这些产品没有按照我想要的方式工作,即找到插入到 table 中的目标事实。这是我整理的规则:

rule "find by product codes rating_1"

   when 
     $product_table: ProductRanking( $rank1:  this.getProductCodesRankFirst())
     $product1 : Product(  this.product_code memberOf $rank1, $product_code: product_code )
     $product2 : Product( this.product_code == 10444,this.product_code != $product_code ,$product_code2: product_code)
   then
    System.out.println("Found Products for product_codes "+$product_code+ " "+$product_code2 ) ;
 end

不幸的是,这 returns 3 行。我在会话中插入了第 2 行的产品,即带有 ocde 45555 的产品,它确实找到了第 2 行。但是,ir 也引入了第 1 行和第 3 行。 我明白为什么要这样做了。这是因为 skus 在 sectId 中,sectId 为 10444。但是,我只想引入行 我插入的是 sectionId(10444), product_code(45555)。我怎样才能做到这一点?

我通过使用全局过滤掉多余的产品解决了这个问题。在排名的第一行,我这样剔除多余的产品:

 global ProductHelper productHelper



$product_table: ProductRanking( $rank1:  productHelper.getProductCodesRankFirst(), 

 productCode != productHelper.getProductCodeFruitCategory() && productCode!= 

         productHelper.productCodeVegetableCategory())

ProductHelper 识别我要删除的产品代码,因此忽略了额外引入的 2 个产品,创建了一个匹配项。我确信有更好的方法,但由于我不是专家,所以这就是我能想出的方法。