2016-10-30 1 views
0

Ich benutze Gremlin um Titan Graph zu handhaben. Und ich versuche einen Weg zu finden, eine sehr spezifische Beziehung zu bekommen.Gremlin bekomme Edge mit spezifischem Anfangs- und Endknoten

Ich habe die Bezeichnung, die Eigenschaften und eine Liste möglicher Start-und Endknoten.

Und ich möchte alle Beziehungen dazu passen.

Ich habe dies bereits alle Beziehungen passendes Label und Eigentum zu erhalten:

GraphTraversal<Edge, Edge> tempOutput = g.E().hasLabel(relationshipStorage.getId()); 

      if(relationshipStorage.getProperties() != null) 
      { 
       for (Map.Entry<String, Object> entry : relationshipStorage.getProperties().entrySet()) 
       { 
        if (tempOutput == null) 
        { 
         break; 
        } 
        tempOutput = tempOutput.has(entry.getKey(), entry.getValue()); 
       } 
      } 

Aber ich habe nicht einen Weg, um es mit einer bestimmten Start- und Endknoten finden. Ich möchte nicht mehrere Kanten zwischen zwei Knoten bekommen. Ich möchte nur eine Kante mit den spezifischen Ecken.

Antwort

3

Siehe das Between Vertices Rezept und nur von dort aus erweitern. Angenommen, Sie möchten Kanten zwischen zwei Vertices mit den IDs 1 und 2 finden. Nehmen wir weiter an, Sie wollten nur "wissen" Kanten mit einer "Weight" -Eigenschaft größer als 0.0.

gremlin> graph = TinkerFactory.createModern() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard] 
gremlin> g.V(1).bothE().where(otherV().hasId(2)).hasLabel('knows').has('weight',gt(0.0)) 
==>e[7][1-knows->2] 
gremlin> g.V(1,2).bothE().where(inV().has(id, within(2,3))).hasLabel('created') 
==>e[9][1-created->3] 
gremlin> vStarts = g.V(1,2).toList().toArray() 
==>v[1] 
==>v[2] 
gremlin> vEnds = g.V(2,3).toList().toArray() 
==>v[2] 
==>v[3] 
gremlin> g.V(vStarts).bothE().where(inV().is(within(vEnds))).hasLabel('created') 
==>e[9][1-created->3] 
+0

Ist so etwas möglich :? ArrayList KnotenStartList = getVertexList (relationStorage.getStartNode(), g); ArrayList KnotenEndList = getVertexList (relationStorage.getEndNode(), g); GraphTraversal tempOutput = g.V (nodeStartList) .bothE(). Wo (g.V (nodeEndList)). HasLabel (relationStorage.getId()); – user2524707

+1

sicher - es gibt ein Modell dafür im Rezept. aktualisiert die Antwort ein wenig ... –

+0

Vielen Dank, wie bekomme ich die InV und innerhalb von Java? – user2524707

Verwandte Themen