2013-05-01 21 views
6

ティンカーポップblueprints APIを使用すると、2つの頂点の間にエッジが存在するかどうかを調べる最良の方法は何ですか?私はvertex.getEdges()を避け、正しいものを見つけるまで反復したいと思います。2つの頂点間のエッジを見つける正しい方法は何ですか?

例えば:v1v2

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を使用すべきチェック?グレムリン経由


私が行うことができます:助けを

g.v(v1.getID()).outE("friends").inV.filter{it.id == v2.getID} 

Neo4j way:

IndexHits<Relationship> relationships = relationshipIndex().get("type", edgeType, node1, node2); 

感謝を! 私はまだこれに新しいです。

+0

コアAPIを使用してフェッチできるようです。この場合、青写真APIの「オーバーヘッド」を使用する理由は何ですか? – tstorms

+0

コアAPIはNeo4jでも可能ですが、タイタンなどでは、私は直接青写真を使用する必要があります – Luccas

+1

あなたは正しい軌道にいると思います。可能な場合は、頂点クエリと頂点中心のインデックスを使用してクエリ時間を改善します。 https://github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices –

答えて

4
gremlin> g.v(1).bothE.as('x').bothV.retain([g.v(3)]).back('x') 
3

Huangmao Quanでの回答で使用されるようなbackステップはTinkerpopで使用できなくなりました。私はすでにこれに答えているので、question次の要求は、より新しいバージョンのtinkerpopスタックに適用されるかもしれません。

g.V().has('propertykey','value1').outE('thatlabel').as('e').inV().has('propertykey','value2').select('e') 
関連する問題