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

Graph 在两个顶点之间找到边的正确方法是什么?,graph,neo4j,graph-databases,titan,tinkerpop,Graph,Neo4j,Graph Databases,Titan,Tinkerpop,使用tinkerpop,找到两个顶点之间是否存在边的最佳方法是什么?我希望避免使用vertex.getEdge()并进行迭代,直到找到正确的顶点 例如:检查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"); // No

使用tinkerpop,找到两个顶点之间是否存在边的最佳方法是什么?我希望避免使用vertex.getEdge()并进行迭代,直到找到正确的顶点

例如:检查
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);
  }
}

IndexHits relationship=relationshipIndex().get(“type”,edgeType,node1,node2);
谢谢你的帮助! 我还是个新手。

试试这个:

gremlin> g.v(1).bothE.as('x').bothV.retain([g.v(3)]).back('x')
if (g.v(1).out('follows').retain([g.v(2)]).hasNext())
{
    println('v(1) follows v(2)')
}
注意:此处的边缘是单向的,即无法推断v2是否跟随v1


来源

Tinkerpop中不再提供回答中使用的
返回
步骤。正如我已经回答过的,下面的请求可能适用于tinkerpop堆栈的最新版本

g.V().has('propertykey','value1').outE('thatlabel').as('e').inV().has('propertykey','value2').select('e')

您似乎可以使用核心API获取它。在这种情况下为什么要使用blueprints API的“开销”呢?核心API在Neo4j中是可能的,但在Titan中,我需要直接使用blueprints,我认为您的思路是正确的。如果可能,请使用顶点查询和以顶点为中心的索引以缩短查询时间。我也在寻找类似于
graphContext.testIncidence(projectVertex(),archiveVertex,“uses”)
if (g.v(1).out('follows').retain([g.v(2)]).hasNext())
{
    println('v(1) follows v(2)')
}
g.V().has('propertykey','value1').outE('thatlabel').as('e').inV().has('propertykey','value2').select('e')
g.V(v1).bothE("edge_label").where(otherV().is(v2)