0
我們有數百萬個頂點和數千萬個邊形成一個有向圖。有人知道如何在兩個給定的頂點之間得到Titan中的子圖嗎?給定兩個特定的頂點,如何在Titan中得到它們之間的子圖?
我們有數百萬個頂點和數千萬個邊形成一個有向圖。有人知道如何在兩個給定的頂點之間得到Titan中的子圖嗎?給定兩個特定的頂點,如何在Titan中得到它們之間的子圖?
TinkerPop有關提供subgraphing的兩種方法:
使用subgraph
步驟爲 「爆開」 子圖到一個單獨的圖形實例。您可以在下面的示例圖「G」如何subgraphed進入一個新的Graph
實例看「知道」的邊緣:
gremlin> subGraph = g.E().hasLabel('knows').subgraph('subGraph').cap('subGraph').next() //(1)
==>tinkergraph[vertices:3 edges:2]
gremlin> sg = subGraph.traversal()
==>graphtraversalsource[tinkergraph[vertices:3 edges:2], standard]
gremlin> sg.E() //(2)
==>e[7][1-knows->2]
==>e[8][1-knows->4]
要遍歷圖形的子集,你會使用的情況下Subgraph
策略只有:
gremlin> graph = TinkerFactory.createTheCrew()
==>tinkergraph[vertices:6 edges:14]
gremlin> g = graph.traversal().withStrategies(SubgraphStrategy.build().
vertices(or(hasNot('location'),properties('location').count().is(gt(3)))).
edges(hasLabel('develops')).
vertexProperties(or(hasLabel(neq('location')),hasNot('endTime'))).create())
==>graphtraversalsource[tinkergraph[vertices:6 edges:14], standard]
gremlin> g.V().valueMap(true)
==>[id:1,label:person,name:[marko],location:[santa fe]]
==>[id:8,label:person,name:[matthias],location:[seattle]]
==>[id:10,label:software,name:[gremlin]]
==>[id:11,label:software,name:[tinkergraph]]
gremlin> g.E().valueMap(true)
==>[id:13,label:develops,since:2009]
==>[id:14,label:develops,since:2010]
==>[id:21,label:develops,since:2012]
根據您的問題的標題,它聽起來就像你只是想兩個頂點與他們之間的邊緣的曲線圖。我想這聽起來像你會想要使用subgraph
步驟。當然,它似乎比更容易得到這一結果:
gremlin> g = TinkerFactory.createModern().traversal()
==>graphtraversalsource[tinkergraph[vertices:6 edges:6], standard]
gremlin> g.V(1).bothE().where(otherV().hasId(2))
==>e[7][1-knows->2]
具有邊緣的名單構成一個意義上的子尤其是在兩個已知頂點的情況。
感謝您的回覆,Stephen Mallette!是否有可能改變爲Titan 0.5.4的命令?目前,我們沒有計劃升級到Titan 1.0。 – kcchiu
TinkerPop 2.x和Titan 0.5.x中沒有內置子圖函數。你必須寫出你自己的方法。你可以很容易地找到兩個頂點之間的邊:'gv(1).bothE.as('x')。both.retain([gv(3)])。back('x')'from [gremlindocs (http://gremlindocs.spmallette.documentup.com/#finding-edges-between-vertices) –
好!我們會更詳細地嘗試。順便說一下,你知道如何在Titan中的有向圖中獲取所有循環嗎?有內置函數還是應該編寫自己的方法? – kcchiu