2014-12-23 20 views
2

我有父顶点(P)连接到子顶点(C1,C2,C3,.. Cn)(通过出边标签“dep”),其中Cn可以非常大。这些子顶点(C1,C2,...)可能会或可能不会通过输出边缘标签“frnds”连接到其他顶点。 Gremlin有没有办法找出(P)中没有任何标签为“frnds”的外向边的所有Child顶点?泰坦图:找到没有出边的顶点

问候, 库马尔

回答

3

玩具图:

g = new TinkerGraph() 
p = g.addVertex('p') 
c1 = g.addVertex('c1') 
c2 = g.addVertex('c2') 
c3 = g.addVertex('c3') 
o1 = g.addVertex('o1') 
o2 = g.addVertex('o2') 
g.addEdge(p, c1, 'dep') 
g.addEdge(p, c2, 'dep') 
g.addEdge(p, c3, 'dep') 
g.addEdge(c1, o1, 'frnds') 
g.addEdge(c1, o2, 'frnds') 
g.addEdge(c2, o2, 'frnds') 

一种查询描述的解决方案(可能不是最聪明的):

r = []; g.v('p').out('dep').store(r).outE('frnds').outV.sideEffect{r.remove(it)} 

输出:

r 
==>v[c3] 

更新: 位一个较短的版本,可能还多一点效率。

g.v('p').out('dep').filter{!it.outE('frnds').hasNext()} 
==>v[c3] 
+0

非常感谢您的快速响应。有用! –

+0

边缘“边缘”具有特定的属性键[如名称,地图比例(0到1之间的某个十进制数字表示接近度)],并且边缘根据地图比例值进行排序。所以c1的第一个边缘总是会有最高的分数。是否可以增强此查询“gv('p').out('dep')。filter {!it.outE('frnds')。hasNext()}”进一步返回所有具有第一个边的子顶点最高地图比率)在一个特定的范围内,如0.5至0.7? –

0

GV( 'P')出( '出发'){过滤it.outE( 'frnds我')hasNext(!。 )}。范围(0,100)查询在您选择范围时工作得更快。它将得到100个顶点,没有出边