首页 文章

Neo4J CSV关系

提问于
浏览
4

我是一个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 回答

  • 2

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

    CREATE CONSTRAINT ON (a:Alert) ASSERT a.ip IS UNIQUE;
    

    您可以根据需要使用尽可能多的 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 以确保每次创建时都不想要一个新节点,你可能希望在这一个IP地址下进行所有引用,因此 MERGE 而不是 CREATE

  • 6

    假设你的图模型是这样的

    (:source) - [:ALERT] - >(:Destination)

    以下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})
    

相关问题