以下是我要做的事情:将用户连接到他们观看的用户视频 - >社交图或网络类型图中的视频。
我是怎么做到的:
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
CREATE (u {user: line.user }) - [:VIEW] -> (v {video: line.video})
RETURN u, v
CSV文件有2列,其中包含用户和视频标题。在用户下面是识别每个用户的号码,在视频下是识别每个视频的号码。一个用户到一个视频。有时,用户名在列表中再次出现在另一个视频中。有时视频编号会再次出现,因为它是由不同的用户观看的。
但是,这会返回在每个关系中查看1个视频的用户关系。因此,每个用户和视频都有多个节点。
我想做什么:创建更多的网络或图形数据库,以查看所有用户正在查看哪些用户正在观看哪些视频和所有视频。要做到这一点,用户和视频不能像现在这样以一对一的关系加入。
我该怎么做?提前谢谢!
答案 0 :(得分:1)
MERGE
将确保它在缺少时创建节点/关系,或者使用它们。由于line.user和line.video似乎相当于主键,因此应该可以正常使用
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MERGE (u {user: line.user })
MERGE (v {video: line.video})
MERGE (u)-[:VIEW]->(v)
RETURN u, v
有关MERGE的更多信息:http://neo4j.com/docs/2.2.2/query-merge.html
答案 1 :(得分:1)
添加到Luannes的答案。
您需要使用标签并提供约束!
:User(user)
您需要在CREATE CONSTRAINT ON (u:User) ASSERT u.user IS UNIQUE;
CREATE CONSTRAINT ON (v:Video) ASSERT v.video IS UNIQUE;
USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.user as user_data
MERGE (:User {user: user_data });
USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
WITH distinct line.video as video_data
MERGE (:Video {video: video_data });
USING PERIODIC COMMIT 100000
LOAD CSV WITH HEADERS FROM 'asdfjkl;' AS line
MATCH (u:User {user: line.user })
MATCH (v:Video {video: line.video})
MERGE (u)-[:VIEW]->(v);
和:视频(视频)`上创建约束才能使其正常工作。
如果要导入更大量的数据(> 100k行),也请使用PERIODIC COMMIT 此外,上述查询必须提取您的数据急切以实现分离。
而是将其分为三个查询:
<tr>
<td width="50%">Your Code Here</td>
<td width="50%">Your Code Here</td>
</tr>
确保使用最新版本(Neo4j 2.2.2)。