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 个产品,创建了一个匹配项。我确信有更好的方法,但由于我不是专家,所以这就是我能想出的方法。
我有一个 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 个产品,创建了一个匹配项。我确信有更好的方法,但由于我不是专家,所以这就是我能想出的方法。