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
相关产品推荐
相关产品推荐

