获得结果作为子图而不是顶点:Gremlin - orient-db

时间:2014-04-07 14:27:58

标签: graph-databases gremlin orientdb

嗨:我是Gremlin和Orient-db的傻瓜。我正在玩Gremlin和java中的db。我能够使用可用的方法查询我的顶点和边缘并获得结果。我使用back(“Alias-name”)来获取查询的结果顶点。

我的问题是我可以得到所有结果顶点的图形(相关图形和结果的信息),因为现在我能够得到顶点但我想得到我的结果的整个“子图”信息同一查询中的顶点。

非常感谢任何帮助。

这是一个带有通用示例的代码:

GremlinPipeline startPipe = pipe.has("friend-name", "friend-name")
            .in("friend-depends").as("friend-depends")
            .outE("resource-depends").inV()
            .has("resource-name", "car")
            .back("friend-depends");

v(Friend)[#15:13]
v(Friend)[#15:7]
v(Friend)[#15:12]

结果是对的,但我希望得到结果

Friend#15:13{friend-name:Frank,Friend-type:Personal,in_depends:#17:10 (friend of friends),... with edges} v2

谢谢, Sabari

1 个答案:

答案 0 :(得分:1)

Gremlin没有提供明确的subgraph函数(截至未发布的2.5.0)。使用Gremlin获取子图的唯一方法是自己显式提取这些图元素。我的偏好是简单地sideEffect内存中TinkerGraph的元素。你可以在这里看到一个例子:

http://gremlindocs.com/#recipes/subgraphing

鉴于您修改过的问题,您可以使用path步骤获取路径的各个部分,如下所示:

gremlin> g = TinkerGraphFactory.createTinkerGraph();
==>tinkergraph[vertices:6 edges:6]
gremlin> g.v(1).outE.inV.path
==>[v[1], e[9][1-created->3], v[3]]
==>[v[1], e[7][1-knows->2], v[2]]
==>[v[1], e[8][1-knows->4], v[4]]
gremlin> g.v(1).outE.inV.has('age',T.gte,31).path
==>[v[1], e[8][1-knows->4], v[4]]

看起来有点像你在找什么。从那里你可以sideEffect到一个子图。从那里你可以选择不再使用back

gremlin> g.v(1).outE.inV.has('age',T.gte,31).path.sideEffect{println it}.collect{it.last()}
[v[1], e[8][1-knows->4], v[4]]
==>v[4]

或坚持下去:

gremlin> g.v(1).as('x').outE.inV.has('age',T.gte,31).path.sideEffect{println it}.back('x') 
[v[1], e[8][1-knows->4], v[4]]
==>v[1]