在两个顶点之间找到边的正确方法是什么?

Luc*_*cas 6 graph neo4j graph-databases titan tinkerpop

使用tinkerpop blueprints API,找到两个顶点之间是否存在边缘的最佳方法是什么?我想避免vertex.getEdges()和迭代,直到找到正确的.

例如:检查是否v1是朋友v2

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

我应该使用顶点查询吗?


通过gremlin我能做到:

g.v(v1.getID()).outE("friends").inV.filter{it.id == v2.getID}
Run Code Online (Sandbox Code Playgroud)

Neo4j方式:

IndexHits<Relationship> relationships = relationshipIndex().get("type", edgeType, node1, node2);
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!我还是新手.

小智 4

gremlin> g.v(1).bothE.as('x').bothV.retain([g.v(3)]).back('x')
Run Code Online (Sandbox Code Playgroud)