2013-10-20 7 views

Odpowiedz

12

Biorąc pod uwagę dwa węzły "nodeA" i "nodeB"

  1. pobiera wszystkie relacje dołączone do "nodeA"

    rels = nodeA.getRelationships(); 
    
  2. iterację kolekcji relacji "RELS" dla dla każdego związku "rel" sprawdź, czy drugim końcowym węzłem jest węzeł B

    rel.getOtherNode(nodeA).equals(nodeB) 
    
  3. jeśli powyższe wyrażenie jest prawdziwe dla jednej z relacji, to nodeA i nodeB są połączone.

Oto Java API dla "węzeł" i "Relationshiip"

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

+2

Pomyślałem Dodam, powinieneś wziąć pod uwagę liczbę krawędzi 'węzłówA' i \ węzłówB' przed wykonaniem tego wyszukiwania, ponieważ możesz wykonać je począwszy od jednego węzła. –

+2

To nie działa dobrze, jeśli masz potencjalnie wiele tysięcy relacji. – 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()); 
} 

logiczna sharedRelationshipBetweenAB odbędzie odpowiedź

Powiązane problemy