【发布时间】:2013-04-25 23:56:24
【问题描述】:
使用 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);
}
}
我应该使用Vertex Query吗?
通过 gremlin 我可以做到:
g.v(v1.getID()).outE("friends").inV.filter{it.id == v2.getID}
IndexHits<Relationship> relationships = relationshipIndex().get("type", edgeType, node1, node2);
感谢您的帮助! 我还是新手。
【问题讨论】:
-
看来您可以使用核心 API 获取它。为什么在这种情况下使用蓝图 API 的“开销”?
-
核心 API 可以用 Neo4j,但以 Titan 为例,我需要直接使用蓝图
-
我认为你是在正确的轨道上。如果可能,请使用顶点查询和以顶点为中心的索引来缩短查询时间。 github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices
-
我也在寻找类似
graphContext.testIncidence(projectVertex(), archiveVertex, "uses");
标签: graph neo4j graph-databases titan tinkerpop