我试图在neo4j中实现一个欺诈检测系统,在那里我有一堆节点,其中有个人、银行账户、信用卡、电话号码和地址。
在银行系统中检测欺诈的基本思想是某人具有银行帐户和信用卡,其中他的信用卡没有与他自己的银行帐户相关联。
我不知道该怎么做。因为当我试图排除这些节点时:WHERE NOT (k)-[:VERKNUEPFT]-(b)
我仍然得到了错误的节点,但它只是隐藏了VERKNUEPFT
节点。
有人能给予我一个正确的方法来否定,排除每个不需要的节点吗?
所以简单地说我需要得到如下输出:
首先,我筛选出哪些节点是需要的:MATCH (p:person)-[r:HAT_KONTO]->(b:bankkonto), (p)-[r2:NUTZT_KARTE]->(k:kreditkarte) return p,b,k,r,r2;
,得到以下结果:
这个Hermine和罗恩下面的节点是正确的,所以我想排除所有与它们链接的节点。
但是当我尝试MATCH (p:person)-[r:HAT_KONTO]->(b:bankkonto), (p)-[r2:NUTZT_KARTE]->(k:kreditkarte) WHERE NOT (k)-[:VERKNUEPFT]-(b) return p,b,k,r,r2;
时
我得到以下结果:
只有bankaccount
(棕色的那个)不见了。
当我用WHERE而不是WHERE NOT测试相同的代码时:MATCH (p:person)-[r:HAT_KONTO]->(b:bankkonto), (p)-[r2:NUTZT_KARTE]->(k:kreditkarte) WHERE (k)-[:VERKNUEPFT]-(b) return p,b,k,r,r2;
我的成就与我的愿望背道而驰。
1条答案
按热度按时间o7jaxewo1#
我认为你需要检查一个人持有的所有信用卡是否都与他的任何一个银行账户相关联。目前,你正在检查这些信用卡是否与特定的银行相关联。可以尝试以下方法:
在上面的查询中,我们首先将一个人关联的银行和他/她的信用卡收集到两个不同的集合中。然后,我们检查是否所有的信用卡都链接到其中一个银行,以过滤出有效的用户。然后我们返回他们的详细信息。