2013-05-01 4 views
6

टिंकरपॉप blueprints API का उपयोग करके, यह पता लगाने का सबसे अच्छा तरीका क्या है कि किनारे दो अक्षरों के बीच मौजूद है? मैं vertex.getEdges() से बचना चाहता हूं और सही होने तक इसे फिर से शुरू करना चाहता हूं।दो शीर्षकों के बीच किनारे को खोजने का सही तरीका क्या है?

उदा .: जाँच करें कि 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); 

मदद के लिए धन्यवाद! मैं अभी भी इसके लिए नया हूं। चाहे वी 2 v1 या नहीं इस प्रकार बढ़त यहाँ दिशाहीन है, यानी आप अनुमान नहीं लगा सकता:

+0

ऐसा लगता है कि आप इसे कोर एपीआई के साथ लाने में सक्षम हैं। इस मामले में ब्लूप्रिंट्स एपीआई के "ओवरहेड" का उपयोग क्यों करें? – tstorms

+0

कोर एपीआई नियो 4j के साथ संभव है, लेकिन उदाहरण के लिए टाइटन के साथ, मुझे सीधे ब्लूप्रिंट्स – Luccas

+1

का उपयोग करने की आवश्यकता है, मुझे लगता है कि आप सही रास्ते पर हैं। प्रश्न समय सुधारने के लिए यदि संभव हो तो Vertex क्वेरी और vertex केंद्रित सूचकांक का उपयोग करें। 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

back कदम के रूप में Huangmao Quan द्वारा जवाब में इस्तेमाल Tinkerpop में अब उपलब्ध नहीं है। जैसा कि मैंने पहले से ही question का उत्तर दिया है, निम्न अनुरोध टिंकरपॉप स्टैक के हाल के संस्करणों पर लागू हो सकता है।

g.V().has('propertykey','value1').outE('thatlabel').as('e').inV().has('propertykey','value2').select('e') 
संबंधित मुद्दे