Mit einer Chiffre-Abfrage auf neo4j, in einem gerichteten, zyklischen Graphen, benötige ich eine BFS-Abfrage und eine Zielknoten-Sortierung pro Tiefe.
Für die Sortierung innerhalb der Tiefe sollte eine benutzerdefinierte "Gesamtpfadkostenfunktion" verwendet werden, die basierend auf
berechnet wirdr.followrank
zwischen Start- und Endknoten. Auf jeder Suchtiefe n
sollte ein Knoten, der mit einem hochrangigen Knoten auf der Ebene n-m, m>0
verbunden ist, höher eingestuft werden als ein Knoten, der mit einem niedrigrangigen Knoten auf der Ebene n-m
verbunden ist. Umgekehrte Direktionalität sollte einen 0-Rang ergeben (was bedeutet, dass der Knoten und sein Teilbaum immer noch Teil der Rangfolge sind).
Ich benutze neo4j community-1.9.M01. Der Ansatz, den ich bisher gemacht habe, war, eine Folge von Folgen für den kürzesten Weg zu jedem Endknoten zu extrahieren
Ich dachte, ich hätte eine großartige erste Idee für diese Frage, aber sie scheint an mehreren Punkten zu versagen.
Meine Abfrage lautet:
%Vor%welche Ausgaben
%Vor%Es sieht ähnlich wie ich aus, aber die Probleme sind
...*length(strt-[*0..]-()-[r]->() )...
sieht noch seltsamer aus - siehe die Abfragen rechts unten. length()
auf 1 normieren soll. Direktionalität:
%Vor%Inverse Abfrage:
%Vor%Meine Fragen sind also:
Für ein zusätzliches Detail, ich kenne den Min (Länge (Pfad)) Aggregator, aber es funktioniert nicht in diesem Fall, wo ich versuche, Informationen über den besten Treffer zu extrahieren - die zusätzlichen Informationen, die ich über die besten zurücksende Hit wird das Ergebnis wieder disaggregieren - ich denke, das ist eine Einschränkung der Ziffern.
Grundsätzlich möchten Sie einen Rang nur unter Berücksichtigung von Beziehungen, die "mit dem Pfadfluss" sind, erstellen. Um "mit Pfadfluss" zu testen, müssen Sie leider den Pfadindex der Start / End-Knoten jeder Beziehung überprüfen, und das kann nur mit APOC jetzt gemacht werden.
%Vor%(Ich kann den APOC-Teil nicht testen, daher müssen Sie möglicherweise NODES (Pfad) statt Pfad zur APOC-Prozedur übergeben)