You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools规则匹配行为:集合对象匹配失败后的执行逻辑问询

Drools规则匹配逻辑疑问

用户提供的规则代码

when
$contract: ContractFact()
$entity: EntityFact
$service: ServiceFact(serviceId == $contract.serviceId) from $contract.services
$ec: EvaluationCriteriaFact(
    toCode contains $entity.toCodes,
    fromCode contains $entity.fromCodes,
) from $service.evaluationCriterias

$pricing: Pricing(($entity.Weight >= minWeight && $entity.Weight <= maxWeight)) from 
$ec.pricingscenarios
$priceResult: PricingResultObject()
then
$priceResult.price = $calculatePrice.getTowPriceG($entity.toCodes, ...)
end

疑问

当某一EvaluationCriteriaFact实例匹配条件,但对应的Pricing条件($entity.Weight >= minWeight && $entity.Weight <= maxWeight)不匹配时,Drools引擎会继续检查evaluationCriterias列表中的剩余对象,还是停止后续评估?


解答

Drools引擎会继续检查evaluationCriterias列表里剩下的EvaluationCriteriaFact实例。

你的规则通过from $service.evaluationCriterias遍历所有符合toCode、fromCode条件的EvaluationCriteriaFact。每找到一个匹配的$ec,引擎就会尝试去匹配它对应的pricingscenarios中的Pricing对象。如果当前这个$ec的pricingscenarios里没有符合重量条件的Pricing,这条匹配路径就失效了,但引擎不会终止遍历,会继续处理下一个符合条件的EvaluationCriteriaFact,重复上述检查流程。

只有当所有evaluationCriterias都遍历完毕,且没有找到任何一条完整的匹配链路(即$contract→$entity→$service→$ec→$pricing→$priceResult全部满足条件),这条规则才不会触发then块的逻辑;如果存在多条完整匹配链路,规则会针对每条链路执行一次then块的操作。


内容的提问来源于stack exchange,提问作者Praveen kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:52:12