2013-02-25 97 views
1

在我的數據庫,我可以使用原生的Neo4j遍歷,看起來有點像這樣提取的子圖:小鬼穿越在Neo4j的

TraversalDescription td = Traversal.description() 
.depthFirst() 
.relationships(Relation.REL1, Direction.OUTGOING) 
.relationships(Relation.REL2, Direction.OUTGOING); 

它就像一個魅力。現在我想做兩件事中的一件,但我期望後者更容易一些。

  1. 我想將遍歷存儲在Tinkerpop藍圖圖形對象中。
  2. 我想在Gremlin中執行相同的查詢(通過java api)並將其存儲在相同類型的圖形對象中。

當我說存儲遍歷作爲一個圖形對象,我實際上的意思是,我不想被存儲在這樣一個圖,我是遍歷期間通過了(所以不僅是葉節點)的每一個節點對象,然後我想要創建新的圖形對象中存在開始和結束節點的每個關係。這包括我沒有包含在我的遍歷描述中的關係。

+0

你是指什麼存儲?這只是遍歷而不修改任何東西? – 2013-02-25 10:15:31

+0

我想從數據庫中提取一個子圖。爲了找出哪個節點在子圖中,我執行遍歷。我爲我的遍歷制定了規則,以便每個endnode都是子圖的一部分。這個子圖需要存儲在Tinkerpop Blueprints圖形對象中,因此我認爲在Gremlin中執行類似的查詢會更容易。 – 2013-02-25 10:32:56

+0

我已經設法做到這一點,將我在遍歷中捕獲的節點ID存儲在列表中,然後將整個Neo4Jgraph複製到Tinkergraph中,並刪除所有不在列表中的節點。但是,這樣做效率低下。我不想複製整個圖並刪除我不需要的東西,我只想插入到Tinkergraph中我遍歷的節點以及這些節點之間存在的每個關係。 – 2013-02-25 10:37:50

回答

1

我覺得像g.outE.filter{it.label == "REL1" || it.label == "REL2"}.inV.loop(3)左右?

+0

如何將其轉換爲使用Java API?我已經嘗試過使用ScriptEngine,並且它沒有工作,並且對於GremlinPipeline類型的難題我有Loop功能。 – 2013-02-25 11:19:29

+0

Java API是什麼意思?你的意思是'blueprints'或者在Java中運行groovy/gremlin? – Nicholas 2013-02-25 15:43:50

+0

Gremlin有一個Java API,因此您不需要學習新的語言:http://www.tinkerpop.com/maven2/com/tinkerpop/gremlin/gremlin-java/1.5/api/index.html?com /tinkerpop/gremlin/java/GremlinPipeline.html – 2013-02-26 10:56:37