Wir haben ein Projekt, in dem wir Spring Data Neo4J verwenden. Einer der wichtigsten Einheiten ist unten dargestellt:Suchen von Blattknoten in einer Neo4J-Datenbank
@NodeEntity
public class Category {
@GraphId
Long id;
String name;
@RelatedTo(direction = Direction.INCOMING, type = "CHILD")
Category parent;
@RelatedTo(direction = Direction.OUTGOING, type = "CHILD")
Set<Category> children;
}
Wir haben eine Anforderung, die Endkategorien alle, um herauszufinden, (das heißt, Kategorien ohne Kinder) aus einer bestimmten Kategorie starten, dessen Name bekannt ist. Zum Beispiel, angesichts der Hierarchie weiter unten:
Electronics
Camera
Point and Shoot
SLR
Computing
Desktop
Laptop
Tablet
Netbook
Furniture
Tables
Office tables
Home tables
Chairs
Lounge chairs
Office chairs
eine Suche nach „Möbeln“ zurückkehren sollte „Office-Tabellen“, „Home-Tabellen“, „Liegestühle“ und „Bürostühle“. Ähnlich sollte eine Suche nach "Computing" "Desktop", "Laptop", "Tablet" und "Netbook" zurückgeben.
Benötigen Sie Hilfe beim Erstellen einer Abfrage, die auf eine Spring Data-Repository-Methode platziert werden kann, um mir alle Blattknoten beginnend mit dem angegebenen Knoten zu geben.
EDIT Die folgende Abfrage (mit der zugehörigen Spring Data Repository-Methode) arbeitete nach Hilfe von Wes:
@Query(
"START category=node:__types__(className='org.example.domain.Category') " +
"MATCH category-[:CHILD*0..]->child " +
"WHERE category.name={0} AND NOT(child-[:CHILD]->()) " +
"RETURN child")
List<Category> findLeaves(String name);
Dies funktioniert nur zu finden suchen, wenn Beziehung Richtung kein Faktor in der Eltern/Kind-Beziehung des Graphen ist (wobei beide Knoten in einem 2-Knoten-Untergraphen als Blattknoten betrachtet würden). Andernfalls wird dies nicht funktionieren, da die Abfrage auch auf dem übergeordneten Element eines 2-Knoten-Untergraphen (sowie dessen untergeordneten) übereinstimmen wird. Definitionsgemäß ist ein Blattknoten ein Knoten ohne untergeordnete Knoten (aber mindestens ein übergeordneter Knoten), und das ist nicht das, was diese Abfrage überprüft. Diese Abfrage kann auch keine Blattknoten in einem Nicht-Baum-Diagramm identifizieren, in dem mehrere eingehende Beziehungen, aber keine ausgehenden Beziehungen vorhanden sind. – InverseFalcon
Ja für eine ungerichtete Grafik – Scott