2015-11-05 204 views
4

我是Neo4J新手,我有一個簡單的CSV與源IP和目標IP。我想創建具有相同標籤的節點之間的關係。Neo4J CSV關係

類似... 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 

....

這工作得很好。我的問題是我如何創建警報內的標籤之間的關係?我已經嘗試過了許多次,但都失敗了。我猜我需要爲源和目標設置單獨的節點,然後將它們鏈接起來,只是不確定如何。

在此先感謝!

和平, 湯姆

回答

6

第一個創建一個這樣的約束,以保證唯一性並加快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地址可能會多次列出,每次創建時都不需要新的節點,因此您可能需要在該IP地址下的所有引用,因此MERGE代替CREATE

2

假設你的圖形模型是一樣的東西

(:源) - [:ALERT] - >(:目的地)

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

您可能會收到以這種方式重複輸入。 –