我是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设置单独的节点然后链接它们,只是不确定如何。
提前致谢!
和平 汤姆
答案 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})