初學者Gremlin問題。我想使用屬性名稱從圖表中檢索節點,然後打印其所有附加屬性。基本Gremlin:查看節點屬性?
這就是我想:
println g.v(20020000001901003)
這是給我空。當我嘗試這個:
println g.idx('mygraph')[[id:20020000001901003]]
輸出是[StartPipe]
。
如何從StartPipe
獲得節點的屬性?
謝謝!
初學者Gremlin問題。我想使用屬性名稱從圖表中檢索節點,然後打印其所有附加屬性。基本Gremlin:查看節點屬性?
這就是我想:
println g.v(20020000001901003)
這是給我空。當我嘗試這個:
println g.idx('mygraph')[[id:20020000001901003]]
輸出是[StartPipe]
。
如何從StartPipe
獲得節點的屬性?
謝謝!
下面是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來完成這些索引查找。
這不適用於Gremlin的最新版本。任何關於如何使它與TinkerPop 3一起工作的指針? – PlagueHammer
更新了我對TinkerPop 3.x的回答 –