首页 文章

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

提问于
浏览
0

我正在阅读LOAD CSV电影示例中的教程示例,同时将其应用于我的项目's test data. (I' m,尝试按照此处的示例代码进行操作:https://neo4j.com/docs/getting-started/current/cypher-intro/load-csv/

我正在尝试在每篇文章的关键字之间创建关系,然后使用一些相同的关键字查找其他文章 .

我的测试数据csv文件的表示如下:用于创建所有 Headers 节点的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

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

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

    在这里看起来只是一个小错误 .

    在你的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)
    

相关问题