2017-09-20 9 views
1

10,000ノードを挿入するこのサイファークエリがあります。これはうまくいく。neo4jでのマージの重複を防ぎ、クエリを高速化する方法は?

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]関係を作成します。私のクエリは20,000余分なノードを作成し、非常に遅く実行されます。私は、マージに重複の問題があることを知っています。このコードをもっと速く動かすにはどうすればいいですか?

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; 
+0

あなたは間違って[マージ](http://neo4j.com/docs/developer-manual/current/cypher/clauses/merge/#query-merge-relationships)を使用しています。 – Tezra

+0

問題解決の手助けをしてください –

答えて

1

はまず、あなたがmobileNubmer、ないMOBILENUMBERを探しているので、2番目のクエリが間違っています。第2に、mobileNumberは、Userにとって一意の制約にする必要があります。第3に(制約がある場合)、これはあなたの構文でなければなりません:

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; 

希望します。

よろしく、 トム

関連する問題