Neo4J CSV关系

时间:2015-11-05 15:25:16

标签: neo4j cypher relationship

我是Neo4J的新手,我有一个简单的CSV,包含源和目标IP。我想在具有相同标签的节点之间创建关系。

像... source_ip>> ALERTS>> dest_ip,或反过来。

"dest_ip","source_ip" 
"130.102.82.16","54.231.19.32" 
"130.102.82.116","114.30.64.11" 
"130.102.82.116","114.30.64.11" 
...

LOAD CSV WITH HEADERS 
FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine  
CREATE (alert:Alert { source_ip: csvLine.source_ip, dest_ip: csvLine.dest_ip})

MATCH (n:Alert) RETURN n LIMIT 25

dest_ip 130.102.82.16 source_ip 54.231.19.32

...

这很好用。我的问题是如何在警报内部创建标签之间的关系?我已经尝试过很多次失败了。我猜我需要为Source和Dest设置单独的节点然后链接它们,只是不确定如何。

提前致谢!

和平 汤姆

2 个答案:

答案 0 :(得分:6)

首先创建这样的约束,以保证唯一性并加快CREATE操作。

MERGE

您可以根据需要使用尽可能多的LOAD CSV WITH HEADERS FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine MERGE (node1:Alert { ip: csvLine.source_ip }) MERGE (node2:Alert { ip: csvLine.dest_ip }) MERGE (node1)-[r:ALERT]->(node2) 语句,然后使用MERGE关系,如下所示:

MERGE

顺便说一句,我建议在大多数地方使用CREATE,以确保您不会创建重复项。在此文件中,某个IP地址可能会多次列出,您不希望每次创建新节点时,您可能希望在该IP地址下进行所有引用,因此"$(SolutionDir)\MY_PROJECT_FOLDER\MY_PROJECT_TARGET"而不是<i:Interaction.Behaviors> <core:EventTriggerBehavior EventName="Loaded"> <core:CallMethodAction TargetObject="{Binding Mode=OneWay}" MethodName="PageLoadedCommand"/> </core:EventTriggerBehavior> </i:Interaction.Behaviors>

答案 1 :(得分:2)

假设您的图表模型类似于

  

(:源) - [:ALERT] - GT;(:目的地)

以下Cypher查询将创建该关系

LOAD CSV WITH HEADERS FROM "file:///Users/me/Desktop/query_result.csv" AS csvLine 
CREATE (source:Source { ip: csvLine.source_ip })-[:ALERTS]->(dest:Destination { ip: csvLine.dest_ip})