2016-06-06 4 views
0

Ich habe die folgende Abfrage:Cant ausführen bedingte Abfrage mit shortestPath mit Cypher

MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP) 
WHERE NOT ((me)-[:relation_1|relation_2*1..3]-()--(group)) 
DELETE rel 

ofcourse von Profiler Ich erhalte viele Hits Coz zweiten Teil meiner Anfrage (die einer nach dem, wo nicht viele interne hat Schleifen)

wollte

ich es mit shortestPath verbessern:

PROFILE 
MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP) 
WHERE NOT shortestPath((me)-[:relation_1|relation_2*1..3]-()--(group)) 
DELETE rel 

aber erraten kann nicht tun es syntaktisch:

Neo.ClientError.Statement.InvalidSyntax 

Eine Idee, wie kann ich kürzestePfad in meiner Abfrage verwenden oder auf andere Weise verbessern?

Screenshot von Profiler:

enter image description here

So habe ich die Abfrage auf diese Weise geändert:

PROFILE 
    MATCH (me:label1{userId:{1}})-[rel:nearby_group]-(group:GROUP) 
    WHERE NOT shortestPath((me)-[:relation_1|relation_2*1..3]-(group)) 
    DELETE rel 

Aber iam ein leeres Ergebnis. ich erwartet, dass die folgende Beziehung zu sehen, gelöscht werden und es den Ball hielt:

enter image description here

Jede Idee?

Danke, Strahl.

Antwort

0

Ihre Abfrage sollte korrekt sein, mit Ausnahme der Verwendung von 2 Doppelpunkten hier:

(me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP) 

sollte
PROFILE MATCH (me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP) where not shortestPath((me)-[:relation_1|relation_2*1..3]-()--(group)) delete rel 

UPDATE:

Auch dann, wenn shortestPath nicht mehr Beziehungsmuster annehmen Definitionen, es ist viel mehr wie (a) - [: TO *] -> (b)

Diese eine Arbeit s in meinem Browser:

PROFILE MATCH (me:BT{userId:{1}})-[rel:nearby_group]-(group:GROUP) where not shortestPath((me)-[:relation_1|:relation_2*..3]-(group)) delete rel 

shortestPath doc

Das bedeutet: einen einzigen kürzesten Weg zwischen zwei Knoten finden, solange der Weg max 15 Beziehungen lang. Innerhalb der Klammern definieren Sie eine einzelne Verbindung eines Pfades - den Startknoten, die verbindende Beziehung und den Endknoten. Merkmale, die die Beziehung wie Beziehungsart, maximale Sprünge und Richtung beschreiben, werden alle verwendet, wenn der kürzeste Pfad gefunden wird. Wenn nach der Übereinstimmung eines kürzesten Pfads eine WHERE-Klausel vorhanden ist, werden die relevanten Prädikate im kürzesten Pfad enthalten sein.Wenn das Prädikat eine NONE() oder ALL() auf die Beziehung Elemente des Weges ist, wird es während der Suche verwendet werden, die Leistung zu verbessern

http://neo4j.com/docs/developer-manual/current/#query-shortest-path

+0

ich Ihre Antwort verwendet. immer noch Neo.ClientError.Statement.InvalidSyntax – rayman

+0

erhalten Sie tatsächlich auf neo4j ausführen? – rayman

+0

I diese 2 Doppelpunkte waren nicht meine Syntaxfrage, da es nur ein Tippfehler war, als ich hier schrieb. meine Frage geändert und immer noch der gleiche Fehler – rayman