neo4j cypher花时间建立关系

时间:2016-07-10 02:58:00

标签: neo4j set relationship

我对neo4j比较陌生。 我导入了1200万条记录的数据集,并且我在两个节点之间创建了一个关系。当我创建这种关系时,我忘了将属性附加到关系中。现在我尝试按如下方式设置关系的属性。

LOAD CSV WITH HEADERS FROM 'file:///FileName.csv' AS row
MATCH (user:User{userID: USERID})
MATCH (order:Order{orderID: OrderId}) 
MATCH(user)-[acc:ORDERED]->(order)
SET acc.field1=field1,
acc.field2=field2;

但是这个查询花了太多时间来执行, 我甚至尝试在用户和订单节点上使用USING索引。

MATCH (user:User{userID: USERID}) USING INDEX user:User(userID)

以后是否可以为关系创建新属性? 请让我知道,我该如何快速有效地完成这项操作。

1 个答案:

答案 0 :(得分:1)

您也忘了在查询前加上USING PERIODIC COMMIT,

您的查询将为2400万次更改(属性更新)构建事务状态,并且没有足够的内存来保持所有状态。

您还忘记row.来自您的CSV的数据,并且这些名称拼写不一致。

如果从neo4j浏览器运行此操作,请注意任何 YELLOW 警告标志。

运行

CREATE CONSTRAINT ON (u:User) ASSERT u.userID IS UNIQUE;

运行

CREATE CONSTRAINT ON (o:Order) ASSERT o.orderID IS UNIQUE;

运行

USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:///FileName.csv' AS row
with row.USERID as userID, row.OrderId as orderID
MATCH (user:User{userID: userID})
USING INDEX user:User(userID)
MATCH (order:Order{orderID: orderID}) 
USING INDEX order:Order(orderID)
MATCH(user)-[acc:ORDERED]->(order)
SET acc.field1=row.field1, acc.field2=row.field2;