2013-10-20 11 views

risposta

12

Dati due nodi "NodoA" e "nodoB",

  1. ottiene tutti i rapporti collegati al "NodoA",

    rels = nodeA.getRelationships(); 
    
  2. scorrere l'insieme di relazioni "REL", per ogni relazione "rel", verifica se l'altro nodo finale è nodoB

    rel.getOtherNode(nodeA).equals(nodeB) 
    
  3. se l'espressione precedente è vera per una delle relazioni, quindi sono collegati il ​​nodoA e il nodoB.

Ecco l'API Java per "Nodo" e "Relationshiip",

http://api.neo4j.org/current/

+2

Ho solo pensato che vorrei aggiungere, che dovresti considerare il conteggio degli spigoli di 'nodeA' e' nodeB' prima di eseguire questa ricerca, dato che puoi eseguirlo partendo da uno dei due nodi. –

+2

Questo non funziona bene se potenzialmente hai molte migliaia di relazioni. – davedonohue

0
private boolean sharedRelationshipExists(Node nodeA, long nodeBId) 
{ 
    Iterator<Relationship> iterator = nodeA.getRelationships().iterator(); 
    while (iterator.hasNext()) 
    { 
     if (iterator.next().getOtherNode(nodeA).getId() == nodeBId) return true; 
    } 
    return false; 
} 

// in another part 
boolean sharedRelationshipBetweenAB; 
if (nodeA.getDegree() < nodeB.getDegree()) 
{ 
    sharedRelationshipBetweenAB = sharedRelationshipExists(nodeA, nodeB.getId()); 
} 
else 
{ 
    sharedRelationshipBetweenAB = sharedRelationshipExists(nodeB, nodeA.getId()); 
} 

il booleano sharedRelationshipBetweenAB terrà la risposta

Problemi correlati