2012-11-20 33 views
2

初學者Gremlin問題。我想使用屬性名稱從圖表中檢索節點,然後打印其所有附加屬性。基本Gremlin:查看節點屬性?

這就是我想:

println g.v(20020000001901003) 

這是給我空。當我嘗試這個:

println g.idx('mygraph')[[id:20020000001901003]] 

輸出是[StartPipe]

如何從StartPipe獲得節點的屬性?

謝謝!

回答

6

下面是Gremlin終端使用玩具圖和TinkerPop 2.x(3.x說明在下面進一步介紹)的一些示例。以下控制檯會話顯示如何創建密鑰索引並在其上進行搜索。

gremlin> g = TinkerGraphFactory.createTinkerGraph() 
==>tinkergraph[vertices:6 edges:6] 
gremlin> g.createKeyIndex("name",Vertex.class) 
==>null 
gremlin> g.V("name","marko").name 
==>marko 
gremlin> g.V("name","marko").map 
==>{age=29, name=marko} 

你應該注意到,之所以g.v(20020000001901003)返回null你是因爲函數試圖查找基於在圖形中元素的唯一標識符的頂點,而不是你分配的標識符(極少數的圖形支持用戶分配的ID ...他們通常生成自己的)。假設在我使用分配的標識符訪問頂點如下:

gremlin> g.V("name","marko") 
==>v[1] 
gremlin> g.v(1).map 
==>{age=29, name=marko} 

如果您已經創建了一個手工索引,那麼你可以使用你所引用的g.idx語法。這裏有一個例子:

gremlin> idx = g.createIndex("my-index",Vertex.class) 
==>index[my-index:Vertex] 
gremlin> idx.put("id", 1000, g.v(1)) 
==>null 
gremlin> g.idx("my-index")[[id:1000]] 
==>v[1] 

我假設你沒有使用Gremlin終端,因此你需要迭代該啓動管道。你可能會做這樣的事情把它發送到一個列表:

gremlin> x=[];g.idx("my-index")[[id:1000]].fill(x) 
==>v[1] 
gremlin> x.size() 
==>1 

TinkerPop 3.x有超過指數沒有TinkerPop有關抽象。您必須使用該方法進行基礎圖形數據庫規定的索引創建。例如,在neo4j中,你會使用一些Cypher語法。用TinkerGraph,只有一個createIndex()方法。你可以看到它的用法如下:

gremlin> graph = TinkerGraph.open() 
==>tinkergraph[vertices:0 edges:0] 
gremlin> graph.createIndex('name',Vertex.class) 
gremlin> g = graph.traversal() 
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard] 
gremlin> g.addV('name','stephen') 
==>v[0] 
gremlin> g.addV('name','steve') 
==>v[2] 
gremlin> g.V().has('name','stephen') 
==>v[0] 

注意,上面最後一行做了查找時,沒有明確的語法從精怪的角度來看,用它來使用索引的「名字」。 TinkerGraph會自動檢測has()的使用情況,並且密鑰是「名稱」,然後它使用索引。如果沒有找到「名稱」的索引,它會對頂點進行全面掃描以找到「stephen」。所有的TinkerPop實現都會使用類似的strategies來完成這些索引查找。

+0

這不適用於Gremlin的最新版本。任何關於如何使它與TinkerPop 3一起工作的指針? – PlagueHammer

+0

更新了我對TinkerPop 3.x的回答 –