使用哪个规则引擎?

时间:2016-06-25 06:31:01

标签: drools rules rule-engine business-rules

我需要处理多个规则并根据匹配条件选择一个值。

规则可以是

情况下-1

----------------------------------------
| A  | B  | C  | D  | priority | value |
----------------------------------------
| a1 | b1 |    | c1   |  1       | 250 |
----------------------------------------
|      | b2 | c2 | d2 |  3       | 200 |
----------------------------------------
| a3   | b3 | c3 | d3 |  2       | 100 |
----------------------------------------

根据上面定义的规则,我们首先寻找最高数量的匹配标准,然后选择该规则的值(即带有值的规则" 100")

情况下-2

----------------------------------------
| A  | B  | C  | D  | priority | value |
----------------------------------------
| a1 | b1 |    | c1 |  1       | 100   |
----------------------------------------
|    | b2 | c2 | d2 |  2       | 200   |
----------------------------------------

如果找到两个具有相同匹配条件的冲突规则,则查找优先级,并选择具有最高优先级的规则。在这种情况下(有价值的规则" 100"。

情况下-3

----------------------------------------
| A  | B  | C  | D  | priority | value |
----------------------------------------
| a1 | b1 |    | c1 |  3       | 100   |
----------------------------------------
|    | b2 | c2 | d2 |  2       | 200   |
----------------------------------------
| a3 | b3 | c3 | d3 |  1       | 300   |
----------------------------------------
| a4 | b4 | c4 | d4 |  1       | 400   |
----------------------------------------

在这种情况下,如果找到多个具有相同匹配条件数且具有相同优先级的规则,则选择具有最高值的规则(即规则4,其值为400)。

我知道它看起来非常具体,但我试图谷歌,但无法遇到可以在这种情况下使用的任何规则引擎。 请先帮我一些指示和想法。

1 个答案:

答案 0 :(得分:0)

正如其他人所指出的那样,任何规则引擎都应该在你的情况下做。由于这看起来乍一看是一个非常轻量级的用例,你可以使用Rulette来做到这一点(Disclosure - 我是作者)。您可以定义规则,然后使用 getAllRules API获取可根据需要执行min / max的适用规则列表。

我很好奇,理解你为什么要定义冲突的规则,然后对它们应用“优先级”?