【发布时间】:2016-12-02 14:48:50
【问题描述】:
我正在研究使用 Neo4j 近乎实时地检测潜在的欺诈性卡交易。我从我们的在线系统收到客户的详细信息和他们刚刚使用的卡。我在这里尝试做的是为客户和卡创建新节点(如果它们不存在),然后建立它们之间的关系。
每当客户使用卡时我想设置卡的最后使用时间,另外,如果这是第一次看到这个客户-->卡关系已经看到,更新客户卡的总数与卡相关联以及与卡相关联的客户数量。
下面的 Cypher 似乎有效,但我认为它会在每次看到关系时重新评估计数,而不仅仅是在创建时。是否可以在此语句中使用 ON MATCH 和 ON CREATE 来限制不必要的处理?
MERGE (c:customers {customer_id:"12345678"})
MERGE (a:cards {card_hash:"45uIic..."})
MERGE (c)-[r:has_card]->(a)
set r.last_transaction = "30-NOV-2016 07:58:42"
set a.card_ct = size(()-[:has_card]->(a))
set c.card_count = size((c)-[:has_card]->())
我正在从 Python 运行它(使用 py2neo),我还想返回一些东西,这将允许我开始定制的基于 dijkstra 的邻域搜索。有什么想法可以根据这是新关系还是现有关系返回一些变量?
【问题讨论】: