给定 key\value 对,找到满足 return true 的所有规则

Given key\value pairs, find all rules that satisfy and return true

这是我今天一直在思考的一个有趣的问题。

给定一个具有 key/value 对的对象和一个具有定义 rules/queries 的 system/tool,找到所有 return 为真的规则。

例如给定一个人:

{
    "FirstName": "John",
    "LastName": "Smith",
    "Age": 28,
    "Gender": "Male",
    "Location": "USA"
}

并给出一些规则:

Rule 1: Location = USA AND (Gender = Male OR Age < 20)
Rule 2: Location != USA AND (Gender = Female OR Age > 25)

我希望系统 return 给定对象的所有规则都是正确的。然后根据正确的规则,做一个具体的动作。

这是一个简单的例子。有趣的部分:

自定义实现的想法是:

做 map reduce 并且只 return 包含来自对象的键的规则。这将减少需要执行的规则数量,但仍可能是几百条规则。

获取每条规则并使用给定值执行它以查看它是否return为真。


有更好的方法吗? 是否有任何工具(希望是开源的)已经可以做到这一点?

搜索return不多,我什至想不出合适的搜索。


编辑

在网上进行了更多搜索后,发现这可以使用 Rete Algorithm 以及 .Net 和 Java 世界中的大量实现来解决。

这是我目前正在走的路。如果大家有更好的建议请提供。

为什么要单独一步映射

尽快中止测试

private bool? ruleMe (person p, rule r) 
{
    foreach (string rKey in r.ExtractKeys())
       if(!p.ContainsKey(rKey)) return (bool?)null;
    // process r 

}

或扩展两者以创建 Key

的 HaskSet
public class person 
{
    private HashSet<String> hSkey;
    public HashSet<String> HSkey 
    {
        if (hSkey == null)
        { 
           hSkey = new HashSet<String>();
           // populate hSkey
        }
        return hSkey;
    }
}

private bool? ruleMe (person p, rule r) 
{
    if(!r.HSkey.IsProperSubset(p.HSkey))  // O(n of r.HSKey) 
       return (bool?)null;
    // process r 
}