簡體   English   中英

Neo4j使用csv創建關系

[英]Neo4j creating relationships using csv

我正在嘗試使用加載的csv文件在兩種類型的節點之間創建關系。 我已經創建了所有電影和關鍵字節點。 我還創建了索引:電影(標題)和:關鍵字(單詞)。

我的csv文件看起來像:

“title”|年|“word”//標題

“進入狂野”| 2007 |“1990”//與標題,年份和關鍵字一致

“走進野外”| 2007 |“廢棄的公共汽車”

我的查詢:

LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MATCH (m:Movie {title:csv.title,year: toInt(csv.year)}), (k:Keyword {word:csv.word})
MERGE (m)-[:Has {weight:1}]->(k);

查詢運行大約一個小時,而不是顯示錯誤“未知錯誤”。 多余的錯誤描述。

我認為這是由於160K關鍵詞和超過1M電影以及csv中超過4M行。 所以我將csv簡化為一行,它仍然運行大約15分鍾,沒有停止。

問題出在哪兒? 如何編寫查詢以創建2個已創建的節點之間的關系?

我也可以刪除所有節點並以其他方式構建我的數據庫,但最好不要刪除所有創建的節點。

注意:我不應該遇到硬件問題,因為我使用的是我們教員的Super PC。

確保使用模式索引來加速查找起始節點。 在運行導入之前做一個:

CREATE INDEX ON :Movie(title)
CREATE INDEX ON :Keyword(word)

確保索引已填充並聯機(請參閱:schema命令)。

將您的Cypher命令重構為兩個查詢,以利用索引 - 現在索引只包含一個標簽和一個屬性:

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MERGE (m:Movie {title:csv.title })
ON CREATE SET m.year = toInt(csv.year)
MERGE (k:Keyword {word:csv.word})

第二次傳遞文件

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:/home/gondil/temp.csv" AS csv
FIELDTERMINATOR '|'
MATCH (m:Movie {title:csv.title })
MATCH (k:Keyword {word:csv.word})
MERGE (m)-[:Has {weight:1}]->(k);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM