2016-07-19 16 views
0

ich ein Diagramm mit einer Struktur wie diese:Cypher variabler Länge Pfadoptimierung

Sample graph

Ich brauche all :Treasure die ganze Rückkehr zurück, die nicht :FOUND_BY mehr als 1 :User war, entweder direkt (roter Pfad) oder über ihre :Group (blauer Pfad).

Meine Chiffre

MATCH (t:Treasure) 
// WHERE with other conditions 
WITH t, SIZE((t)-[:FOUND_BY|MEMBER_OF*1..2]-(:User))) as finders 
WHERE finders < 2 
RETURN t 

gibt die Knoten ich suche, aber verbringt schreckliche Zeit auf, dass variable Pfad zu erweitern. Wie könnte ich diese Chiffre optimieren, den variablen Pfad loswerden, aber die gleichen Ergebnisse beibehalten?

Antwort

0

Es scheint, wie Sie gerade

MATCH (t:Treasure) 
WHERE size((t)-[:FOUND_BY]->()) < 2 
RETURN t 

tun könnten Sie das Etikett auf der anderen Seite der [:FOUND_BY] Beziehung weglassen können, so dass Sie beiden Fälle zu berücksichtigen. Lass es mich wissen, wenn ich falsch verstanden habe.

Edit: Per Ihren Kommentar Ich denke, der beste Weg, die mit variabler Länge Pfad zu vermeiden ist:

MATCH (t:Treasure) 
WHERE size((t)-[:FOUND_BY]->(:User)) + 
     size((t)-[:FOUND_BY]->(:Group)<-[:MEMBER_OF]-(:User)) < 2 
RETURN t 
+0

Das ist nicht das gleiche ist. Ich muss die Knoten ': User' zählen, nicht die Anzahl der Beziehungen. Eine '' Gruppe' 'ohne Mitglied sollte nicht zählen. – endrec

+0

@endrec Ich habe meine Antwort aktualisiert. –

+0

danke, aber das wird zählen '(a: Benutzer) <- [: FOUND_BY] - (t) - [: FOUND_BY] -> (: Gruppe) <- [: MEMBER_OF] - (a)' (gleicher Benutzer direkt und indirekt bezogen auf t) als 2. – endrec

Verwandte Themen