2013-02-25 55 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