如何解决无法通过Neo4j建立三种关系的图形
我有3个文件用于在neo4j上构建图形。
member.csv
memberID
1
2
3
member_visit
visitID memberID visitDateTime
1 1 1/1/2020
2 1 1/5/2020
3 2 4/2/2020
4 3 1/5/2020
5 3 3/7/2020
member_product1
p1ID memberID visitDateTime productName_1
1 1 1/1/2020 Coco
2 1 1/5/2020 Water
3 2 4/2/2020 Snack
4 3 1/5/2020 iPhone
5 3 3/7/2020 iPad
我使用neo4j浏览器创建节点和关系
////////////////// LOAD DATA //////////////////
LOAD CSV WITH HEADERS FROM 'file:///member.csv' AS row
MERGE (member: Member {memberID: row.memberID})
RETURN member limit 20;
LOAD CSV WITH HEADERS FROM 'file:///member_visit.csv' AS row
MERGE (visit:Visit {visitID: toInteger(row.visitID)})
ON CREATE SET visit.memberID = toInteger(row.memberID),visit.visitDateTime = row.visitDateTime
RETURN visit limit 20;
LOAD CSV WITH HEADERS FROM 'file:///member_product1.csv' AS row
MERGE (pro1:Pro1 {p1ID: toInteger(row.p1ID)})
ON CREATE SET pro1.memberID = toInteger(row.memberID),pro1.visitDateTime = row.visitDateTime,pro1.productName_1 = row.productName_1
RETURN pro1 limit 20;
////////////////// MATCH DATA //////////////////
LOAD CSV WITH HEADERS FROM 'file:///member_visit.csv' AS row
MATCH (visit:Visit {visitID: toInteger(row.visitID)})
MATCH (member:Member {memberID: row.memberID})
MERGE (visit)-[pv:visited]->(member)
ON CREATE SET pv.memberID = toInteger(row.memberID),pv.visitDateTime = row.visitDateTime
LOAD CSV WITH HEADERS FROM 'file:///member_product1.csv' AS row
MATCH (pro1:Pro1 {p1ID: toInteger(row.p1ID)})
MATCH (visit:Visit {visitID: toInteger(row.visitID)})
MERGE (pro1)-[vpm:bought]->(visit)
ON CREATE SET vpm.memberID = toInteger(row.memberID),vpm.visitDateTime = row.visitDateTime,vpm.productName_1 = productName_1
在上述代码中,它可以使用代码(visit)-[pv:visited]->(member)来构建[member]来[visit]
但是我无法使用代码(pro1)-[vpm:bought]->(访问)对[productName_1]构建[visit]
我希望这张图
能帮我检查一下吗?怎么了?为什么它不起作用?
解决方法
似乎第3个文件(member_product1.csv
)包含了另外两个文件,这是您唯一需要的文件。
似乎根本不需要Visit
节点,因为您可以将visitDateTime
置于Member
和Pro1
节点之间的直接关系中
最后,无需在节点中冗余存储与之有关系的节点的ID。
LOAD CSV WITH HEADERS FROM 'file:///member_product1.csv' AS row
MERGE (m:Member {id: TOINTEGER(row.memberID)})
MERGE (p:Pro1 {id: TOINTEGER(row.p1ID)})
ON CREATE SET p.productName_1 = row.productName_1
MERGE path=(m)-[:BOUGHT {visitDateTime: row.visitDateTime}]->(p)
RETURN path
LIMIT 20;
上面的查询将生成如下路径:
(:Member {id: 123})-[:BOUGHT {visitDateTime: '1234567890'}]->(:Pro1 {id: 234})
或视觉上:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。