Abbiamo un progetto in cui utilizziamo Spring Data Neo4J. Uno dei soggetti più importanti è la seguente:Ricerca di nodi foglia in un database Neo4J
@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;
}
Abbiamo un requisito per scoprire tutte le categorie foglia (cioè categorie senza figli) a partire da una determinata categoria il cui nome è noto. Ad esempio, data la gerarchia illustrato di seguito:
Electronics
Camera
Point and Shoot
SLR
Computing
Desktop
Laptop
Tablet
Netbook
Furniture
Tables
Office tables
Home tables
Chairs
Lounge chairs
Office chairs
una ricerca per "Mobili" dovrebbe restituire "Tavoli da ufficio", "tavoli per la casa", "sedie a sdraio" e "Sedie da ufficio". Allo stesso modo, una ricerca per "Computing" dovrebbe restituire "Desktop", "Laptop", "Tablet" e "Netbook".
Hai bisogno di aiuto nella creazione di una query di cifratura che può essere inserita in un metodo di repository dati Spring per darmi tutti i nodi foglia a partire dal nodo specificato.
EDIT La seguente query (con il metodo repository Associated Spring Data) ha lavorato, dopo l'aiuto di 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);
Funziona solo se la direzione rapporto non è un fattore nella relazione padre/figlio del grafico (dove entrambi i nodi in un sottografo a 2 nodi sarebbero considerati nodi foglia). Altrimenti questo non funzionerà, poiché la query corrisponderà anche al genitore di un sottografo a 2 nodi (così come al suo figlio). Per definizione un nodo foglia è un nodo senza nodi figlio (ma almeno un nodo genitore), e questo non è ciò che questa query sta controllando. Inoltre, questa query non riuscirà a identificare i nodi foglia in un grafico non ad albero, in cui vi sono più relazioni in entrata ma nessuna relazione in uscita. – InverseFalcon
Sì per un grafico non orientato – Scott