Neo4j LOAD CSV无法匹配和创建关系

时间:2018-12-10 03:27:09

标签: neo4j cypher

我正在研究LOAD CSV电影示例中的教程示例,同时将其应用于项目的测试数据。 (我尝试在此处遵循示例代码: https://neo4j.com/docs/getting-started/current/cypher-intro/load-csv/

我正在尝试在每篇文章的关键字之间建立关系,然后查找具有某些相同关键字的其他文章。

我的测试数据csv文件的表示如下: CSV用于创建所有标题节点:

title_id,title  
T1,Article Title 1  
T2,Article Title 2  
我要用于创建关系的

CSV:

title_id,keyword_id,keyword  
T1,K1,aaa  
T1,K2,bbb  
T1,K3,ccc  
T1,K4,ddd  
T2,K1,aaa  
T2,K5,eee  
T2,K6,fff  
T2,K4,ddd  

首先,我尝试使用以下代码创建标题节点:

LOAD CSV WITH HEADERS FROM "file:///1209_tet_titles.csv" AS csvLine1
WITH csvLine1
WHERE csvLine1.title_id IS NOT NULL
MERGE (a_title:title{t_id:csvLine1.title_id,Title:csvLine1.title})

然后,我尝试使用以下代码在关系旁创建各个关键字节点:

LOAD CSV WITH HEADERS FROM "file:///1209test_titleid_kwid_kw.csv" AS csvLine3
WITH csvLine3
WHERE csvLine3.title_id IS NOT NULL
MERGE(keywords:Keyword{k_id:csvLine3.keyword_id,Keyword:csvLine3.keyword})
WITH csvLine3
MATCH(title:Title{id:csvLine3.title_id}),(keyword:Keyword{id:csvLine3.keyword_id)})
CREATE (title)-[r1:HAS_KEYWORDS]->(keyword)

已成功创建节点,但是match命令什么也没找到,因此也没有创建关系。在这个阶段,我不确定我的情况和电影示例之间有什么区别...

1 个答案:

答案 0 :(得分:0)

在这里看起来像一个小错字。

在MERGE中,您正在合并k_id属性,但是在MATCH中,您正在匹配一个id属性,该属性不存在。如果您将其更改为k_id,那么您应该会看到它成功。

也就是说,不需要重新匹配刚刚创建的节点,因为您可以将变量保留在范围内,并在创建关系时使用它:

LOAD CSV WITH HEADERS FROM "file:///1209test_titleid_kwid_kw.csv" AS csvLine3
WITH csvLine3
WHERE csvLine3.title_id IS NOT NULL
MERGE (keyword:Keyword{k_id:csvLine3.keyword_id, Keyword:csvLine3.keyword})
WITH csvLine3, keyword
MATCH (title:Title{t_id:csvLine3.title_id})
CREATE (title)-[:HAS_KEYWORDS]->(keyword)
相关问题