我对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)
以后是否可以为关系创建新属性? 请让我知道,我该如何快速有效地完成这项操作。
答案 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;