Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 确定决策表中哪些字段与事实不匹配_Drools_Kie_Redhat Brms - Fatal编程技术网

Drools 确定决策表中哪些字段与事实不匹配

Drools 确定决策表中哪些字段与事实不匹配,drools,kie,redhat-brms,Drools,Kie,Redhat Brms,我有一个用例,它要求我知道决策表中哪些字段匹配,哪些字段不匹配。我知道Drools使用算法来有效地识别匹配,它不是一种程序性的方法,它会逐个检查字段,但我仍然想知道是否有可能在字段级别识别匹配 用一个简化的例子来说明它,考虑下面的决策表: 现在,假设我正在使用RESTAPI提交事实以获得决策。如果我发送以下事实: 车辆类型:汽车 尺寸:轿车 制造商:日产 建成年份:2015年 我不会找到任何匹配项,因为没有涵盖2015年的匹配规则。但是,我想知道Drools找到了与车型、尺寸和制造商匹配的车型,

我有一个用例,它要求我知道决策表中哪些字段匹配,哪些字段不匹配。我知道Drools使用算法来有效地识别匹配,它不是一种程序性的方法,它会逐个检查字段,但我仍然想知道是否有可能在字段级别识别匹配

用一个简化的例子来说明它,考虑下面的决策表:

现在,假设我正在使用RESTAPI提交事实以获得决策。如果我发送以下事实:

  • 车辆类型:汽车
  • 尺寸:轿车
  • 制造商:日产
  • 建成年份:2015年
  • 我不会找到任何匹配项,因为没有涵盖2015年的匹配规则。但是,我想知道Drools找到了与车型、尺寸和制造商匹配的车型,但未能找到与制造年份匹配的车型:


    处理这个用例的建议方法是什么?

    这是一个多么有趣的问题。在我看来,你可以使用部分规则继承,然后看看哪些规则匹配;部分匹配将显示您找到了汽车/尺寸/制造商匹配,但没有汽车/尺寸/制造商/年份。不过,我不确定你会在决策表中如何做到这一点。你可以“模拟”这一年,看看是否会触发整个规则,并判断其他领域是否需要回复。虽然考虑了继承,但它的问题是规则管理开销,更重要的是,规则变得更像程序性的。关于“模拟”年,您的意思是如果规则引擎找不到任何匹配项,请再次调用它并通过已知存在的一年?因此,很明显,这一年的问题是什么?我在这里看到的问题是,我在实际的实现中有更多的字段,所以这可能是不切实际的。表数据用于用setter和getter填充模型类。您可以模拟所需的getter来返回所需的数据并覆盖表中的数据,以便触发规则并确认其他匹配字段或显示相反的字段。@换句话说,您的建议是1。调用规则,如果未找到匹配项,则为2。使用我知道应该存在的字段值再次调用规则,如果找到匹配项,则这是不匹配的字段,如果没有,则为3。尝试下一个领域,等等,我的理解是否正确?这是一个多么有趣的问题。在我看来,你可以使用部分规则继承,然后看看哪些规则匹配;部分匹配将显示您找到了汽车/尺寸/制造商匹配,但没有汽车/尺寸/制造商/年份。不过,我不确定你会在决策表中如何做到这一点。你可以“模拟”这一年,看看是否会触发整个规则,并判断其他领域是否需要回复。虽然考虑了继承,但它的问题是规则管理开销,更重要的是,规则变得更像程序性的。关于“模拟”年,您的意思是如果规则引擎找不到任何匹配项,请再次调用它并通过已知存在的一年?因此,很明显,这一年的问题是什么?我在这里看到的问题是,我在实际的实现中有更多的字段,所以这可能是不切实际的。表数据用于用setter和getter填充模型类。您可以模拟所需的getter来返回所需的数据并覆盖表中的数据,以便触发规则并确认其他匹配字段或显示相反的字段。@换句话说,您的建议是1。调用规则,如果未找到匹配项,则为2。使用我知道应该存在的字段值再次调用规则,如果找到匹配项,则这是不匹配的字段,如果没有,则为3。尝试下一个领域,等等,我的理解是否正确?