Mit tinkerpop blueprints API, was ist der beste Weg zu finden, ob eine Kante zwischen zwei Vertices existiert? Ich möchte vertex.getEdges()
vermeiden und iterieren, bis ich den richtigen finde.Was ist der richtige Weg, um eine Kante zwischen zwei Ecken zu finden?
Z. B .: Überprüfen Sie, ob v1
Freund von v2
ist
Vertex v1 = g.addVertex(null);
Vertex v2 = g.addVertex(null);
Edge edge = g.addEdge(null, v1, v2, "friends");
Edge edge = g.addEdge(null, v1, v2, "follows");
// Node with lots of edges - Supernode - problem?
List<Edge> edges = new ArrayList<Edge>();
for(Edge edge : g.getVertex(v1.getId()).getEdges(Direction.OUT, "friends")){
if(edge.getVertex(Direction.IN).getId().equals(v2.getId()){
edges.add(edge);
}
}
ich Vertex Query verwenden sollte?
Via Gremlin konnte ich tun:
g.v(v1.getID()).outE("friends").inV.filter{it.id == v2.getID}
IndexHits<Relationship> relationships = relationshipIndex().get("type", edgeType, node1, node2);
Danke für die Hilfe! Ich bin noch neu dazu.
Es scheint, dass Sie es mit der Kern-API abrufen können. Warum sollte in diesem Fall der "Overhead" der Blueprints-API verwendet werden? – tstorms
Die Kern-API ist mit Neo4j möglich, aber mit Titan zum Beispiel muss ich direkt Blaupausen verwenden – Luccas
Ich denke, dass Sie auf dem richtigen Weg sind. Verwenden Sie möglichst Vertex-Abfrage- und vertexzentrische Indizes, um die Abfragezeiten zu verbessern. https://github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices –