如何使用neo4j中的merge防止重复并使查询更快?

如何使用neo4j中的merge防止重复并使查询更快?,neo4j,duplicates,cypher,load-csv,Neo4j,Duplicates,Cypher,Load Csv,我有这个密码查询来插入10000个节点。这个很好用 LOAD CSV WITH HEADERS FROM "file:///persons.csv" AS csv MERGE (u2:User {mobileNumber: csv.mobileNumber}) ON CREATE SET u2.memberType = csv.memberType ON CREATE SET u2.accountId = csv.accountId ON CREATE

我有这个密码查询来插入10000个节点。这个很好用

LOAD CSV WITH HEADERS FROM "file:///persons.csv" AS csv
MERGE (u2:User {mobileNumber: csv.mobileNumber})
       ON CREATE SET u2.memberType = csv.memberType
       ON CREATE SET u2.accountId = csv.accountId
       ON CREATE SET u2.accountType = csv.accountType
       ON CREATE SET u2.createdAt = csv.createdAt
       SET u2.updatedAt = csv.updatedAt
现在,20个新节点与一些已经存在的其他节点创建[:contact]关系。我的查询额外创建了20000个节点,运行速度非常慢。我知道merge在复制方面有一些问题。如何使此代码运行得更快

LOAD CSV WITH HEADERS FROM "file:///phonebook.csv" AS csv
MERGE (:User{mobileNubmer: csv.ownerMobileNumber})-[c:CONTACT]->
(:User{mobileNubmer:csv.contactMobileNumber})
    ON CREATE SET c.createdAt = csv.createdAt
    ON MATCH set c.previousIsActive = 
    csv.previousIsActive
    SET c.name = csv.name
    SET c.relationship = csv.relationship
    SET c.isActive = csv.isActive
    SET c.updatedAt = csv.updatedAt;

首先,您的第二个查询是错误的,因为您正在搜索MobileUnumber,而不是MobileUnumber。其次,mobileNumber应该是用户的唯一约束。第三(考虑到约束已到位),这应该是您的语法:

LOAD CSV WITH HEADERS FROM "file:///phonebook.csv" AS csv
MATCH (owner:User{mobileNumber: csv.ownerMobileNumber})
MATCH (contact:User{mobileNumber: csv.contactMobileNumber})
MERGE (owner)-[c:CONTACT]->(contact)
    ON CREATE SET c.createdAt = csv.createdAt
    ON MATCH set c.previousIsActive = csv.previousIsActive
    SET c.name = csv.name
    SET c.relationship = csv.relationship
    SET c.isActive = csv.isActive
    SET c.updatedAt = csv.updatedAt;
希望这有帮助

问候,,
Tom

您使用不正确。请帮我修复它