2013-05-01 36 views
6

tinkerpop blueprints API'u kullanarak, iki köşe arasında bir kenar olup olmadığını bulmanın en iyi yolu nedir? vertex.getEdges()'dan kaçınmak ve doğru olanı buluncaya kadar yinelemek istiyorum. v1v2İki köşe arasında bir kenar bulmanın doğru yolu nedir?

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); 
    } 
} 

Ben Vertex Query kullanmalıyım arkadaşı ise

.: edin Örn? gremlini Via


yapabileceğim: Yardım için

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

Neo4j way:

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

Teşekkür! Hala bu konuda yeniyim.

+0

Bunu çekirdek API ile getirebilirsiniz. Bu durumda, planların API'sinin "üstünü" neden kullanmalısınız? – tstorms

+0

Çekirdek API Neo4j ile mümkündür, ancak Titan ile, örneğin doğrudan doğruya planlarda olduğunuzu düşünüyorum – Luccas

+1

. Sorgu sürelerini geliştirmek için mümkünse Vertex sorgusunu ve vertex merkezli indekslerini kullanın. https://github.com/thinkaurelius/titan/wiki/Vertex-Centric-Indices –

cevap

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

Huangmao Quan tarafından cevap kullanılan back adım Tinkerpop içinde artık mevcut değil. Ben zaten bu question için yanıt olarak, tinkerpop yığınının daha yeni sürümleri için aşağıdaki istek geçerli olabilir.

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