2013-10-20 20 views

Antwort

12

Gegeben zwei Knoten "nodeA" und "NodeB",

  1. erhält alle Beziehungen an "nodeA",

    rels = nodeA.getRelationships(); 
    
  2. Iterierte durch die Sammlung von Beziehungen "rels", für jede Beziehung "rel", testen, ob der andere Endknoten nodeB ist

    rel.getOtherNode(nodeA).equals(nodeB) 
    
  3. Wenn der obige Ausdruck für eine der Beziehungen gilt, sind nodeA und nodeB verbunden.

Hier ist die Java-API für "Knoten" und "Relationshiip",

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

+2

halte ich dachte, ich würde hinzufügen, Beachten Sie, dass Sie die Kantenanzahl von "nodeA" und "nodeB" vor der Durchführung dieser Suche berücksichtigen sollten, da Sie sie von einem der beiden Knoten aus starten können. –

+2

Dies funktioniert nicht gut, wenn Sie potenziell viele tausend Beziehungen haben. – 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()); 
} 

die boolean sharedRelationshipBetweenAB Ihre Antwort