在泰坦(hbase)圖中,我想爲給定節點獲得共同的祖先。 使用gremlin有什麼辦法可以獲得共同的祖先? 或任何其他Utils/libs可用於在給定節點的Titan圖中找到共同的祖先?泰坦圖中的共同祖先..
1
A
回答
3
我會對你在這裏找到的具體內容做一些假設,但也許這個答案會激勵你想出你正在尋找的東西。我用toy graph來演示這種方法,並假定邊緣定向指向兒童。顯然,這不是一個完美的樹,但有足夠的數據來證明遍歷。以下是我所想找到祖先的「孩子」:
gremlin> g = TinkerGraphFactory.createTinkerGraph()
==>tinkergraph[vertices:6 edges:6]
gremlin> children = [g.v(2),g.v(5),g.v(6)]
==>v[2]
==>v[5]
==>v[6]
我可以通過祖先遞歸循環向上穿過樹,看到如下路徑:
gremlin> children._().in.loop(1){it.loops<5}{true}.path
==>[v[2], v[1]]
==>[v[5], v[4]]
==>[v[5], v[4], v[1]]
以上線帽距離祖先和閉包5步的循環僅僅意味着在循環的所有步驟輸出值。一個共同的祖先將是其中的每個路徑終止一次以上:
gremlin> children._().in.loop(1){it.loops<5}{true}.groupCount.cap.next().findAll{it.value>1}
==>v[1]=2
在這個意義上v[1]
是三個子節點中唯一的共同祖先,並且只有3個節點2共享祖先。爲了使它更有趣,讓我們連接頂點6
到頂點4
和重新執行遍歷:
gremlin> children._().in.loop(1){it.loops<5}{true}.groupCount.cap.next().findAll{it.value>1}
==>v[1]=3
==>v[4]=2
現在頂點4
是作爲一個共同的祖先。它有頂點6
和5
的孩子。鑑於頂點4
的共享性質,6
現在也共享頂點1
,以便祖先現在由所有三個頂點共享。
更新:以上答案適用於TinkerPop 2.x,以下內容適用於TinkerPop 3.x.
鑑於此樹:
gremlin> g.addV().property(id, 'A').as('a').
addV().property(id, 'B').as('b').
addV().property(id, 'C').as('c').
addV().property(id, 'D').as('d').
addV().property(id, 'E').as('e').
addV().property(id, 'F').as('f').
addV().property(id, 'G').as('g').
addE('hasParent').from('a').to('b').
addE('hasParent').from('b').to('c').
addE('hasParent').from('d').to('c').
addE('hasParent').from('c').to('e').
addE('hasParent').from('e').to('f').
addE('hasParent').from('g').to('f').iterate()
你可以找到共同的祖先有:
gremlin> g.V('A').
......1> repeat(out('hasParent')).emit().as('x').
......2> repeat(__.in('hasParent')).emit(hasId('D')).
......3> select('x').limit(1)
==>v[C]
本主題在TinkerPop recipes更充分的討論。
相關問題
- 1. python最低共同祖先
- 2. 泰坦DB圖JSON
- 3. 沒有共同祖先的分支
- 4. Neo4j的最低共同祖先
- 5. 泰坦圖葉節點
- 6. 刪除泰坦圖中的後代
- 7. 泰坦:圖中的範圍查詢
- 8. 最低公共祖先(升壓圖)
- 9. 爲什麼UITableViewCell和UITableViewHeaderFooterView不共享某個共同的祖先?
- 10. 無法在泰坦
- 11. 從一組xpath中找到共同的祖先?
- 12. 如何在git merge中強制共同的祖先?
- 13. 什麼是C#中視覺元素的共同祖先?
- 14. 新來泰坦分貝,幫助安裝泰坦分貝
- 15. Thinkaurelius泰坦配置的BerkeleyDB
- 16. hbase上的泰坦熱區
- 17. 如何使用gephi流化泰坦圖?
- 18. 問題與泰坦圖形數據庫
- 19. 問題與泰坦圖形數據庫
- 20. 在neo4j中查找最低共同祖先(LCA)
- 21. 選擇具有最接近的共同祖先的元素
- 22. Tarjan的最不共同的祖先算法解釋
- 23. 從祖先的祖先繼承方法
- 24. 泰坦Db忽略指數
- 25. 泰坦:取排序結果
- 26. 泰坦DB壞指數
- 27. 與泰坦連接cassandra
- 28. 索引泰坦/劍鋒
- 29. 將泰坦連接到Solr
- 30. 泰坦 - Faunus - Gremlin例子