Neo4j Cypher:无法定义与重复记录的关系

Neo4j Cypher:无法定义与重复记录的关系,neo4j,cypher,Neo4j,Cypher,因此,我有一些用户事件数据,并希望创建一个相同的图形。数据的快照 现在,\u id列有重复的记录,但它们实际上是同一个人,但是对于相同的\u id LOAD CSV WITH HEADERS FROM 'file:///df_temp.csv' AS users CREATE (p:Person {nodeId: users._id, sessionId: users.session_streams_y}) CREATE (sn:Session {sessId: users.sessionFi

因此,我有一些用户事件数据,并希望创建一个相同的图形。数据的快照

现在,
\u id
列有重复的记录,但它们实际上是同一个人,但是对于相同的
\u id

LOAD CSV WITH HEADERS FROM 'file:///df_temp.csv' AS users
CREATE (p:Person {nodeId: users._id, sessionId: users.session_streams_y})
CREATE (sn:Session {sessId: users.sessionField, sessionId: users.session_streams_y})

MATCH (p:Person) 
with p as ppl
MATCH (sn:Session) 
WITH ppl, sn as ss
WHERE ppl.sessionId=ss.sessionId
MERGE (ppl)-[:Sessions {sess: 'Has Sessions'}]-(ss)
WITH [ppl,ss] as ns
CALL apoc.refactor.mergeNodes(ns) YIELD node
RETURN node
我想要的是这样的:

Node A -> sessionNode a1 -> Action Node a11 (with event type as properties, 4 in this case)
       -> sessionNode a2 -> Action Node a21 (with event type as properties, 2 in this case)
Node B -> sessionNode b1 -> Action Node b11 (with event type as properties, 3 in this case)
我尝试了以下代码,但由于不熟悉图形,我无法复制相同的代码:

session\u streams\u y
具有与
\u id

LOAD CSV WITH HEADERS FROM 'file:///df_temp.csv' AS users
CREATE (p:Person {nodeId: users._id, sessionId: users.session_streams_y})
CREATE (sn:Session {sessId: users.sessionField, sessionId: users.session_streams_y})

MATCH (p:Person) 
with p as ppl
MATCH (sn:Session) 
WITH ppl, sn as ss
WHERE ppl.sessionId=ss.sessionId
MERGE (ppl)-[:Sessions {sess: 'Has Sessions'}]-(ss)
WITH [ppl,ss] as ns
CALL apoc.refactor.mergeNodes(ns) YIELD node
RETURN node
这给了我们一些不同的东西


类似的东西可能适合您:

LOAD CSV WITH HEADERS FROM 'file:///df_temp.csv' AS row
MERGE (p:Person {id: row._id})
MERGE (s:Session {id: row.sessionField})
FOREACH(
  x IN CASE WHEN s.eventTypes IS NULL OR NOT row.eventType IN s.eventTypes THEN [1] END |
  SET s.eventTypes = COALESCE(s.eventTypes, []) + row.eventType)
MERGE (p)-[:HAS_SESSION]->(s)
RETURN p, s
生成的
Person
Session
节点将是唯一的,每个
Session
节点将有一个具有不同值的
eventTypes
列表,相应的
Person
Session
节点将通过
HAS\u Session
关系连接


操作
节点似乎不是必需的。

不清楚您要做什么。为什么不使用
eventType
session\u streams\u y
的目的是什么?我使用
session\u streams\u y
作为两个节点之间的公共连接,我不确定在没有公共键的情况下如何定义此关系。另外,我不确定
eventType
在我的代码中放在哪里?这个
加载带有标题的CSV从'file:///df_temp.csv'当用户创建时(p:Person{nodeId:users.session_streams_y})-[r:hasSession]->(sn:session{Sessiond:users.sessionField})
为我提供了重复的关系节点正是我想要的!这是一个复杂的查询,我自己都不知道这是执行此操作的最佳方式吗?我有大约5万行,运行此查询需要花费很长时间。有什么解决办法吗。我想在这上面运行一些路径算法