【问题标题】:Titan graph: Finding vertices without outgoing edges泰坦图:寻找没有出边的顶点
【发布时间】:2015-02-21 21:52:24
【问题描述】:

我将父顶点 (P) 连接到子顶点 (C1, C2, C3,..Cn)(通过传出边标签“dep”),其中 Cn 可能非常大。这些子顶点(C1、C2、..)可能会或可能不会通过传出边标签“frnds”连接到其他顶点。 Gremlin 中有没有办法找出 (P) 的所有子顶点,这些顶点没有任何带有标签“frnds”的出边?

问候, 库马尔

【问题讨论】:

    标签: graph titan gremlin


    【解决方案1】:

    玩具图:

    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]
    

    【讨论】:

    • 边缘“frnds”具有某些属性键[如名称、映射比率(0 到 1 之间的一些十进制数表示接近度)],并且边缘也根据映射比率值排序。所以来自 c1 的第一条边总是有最高分。是否可以进一步增强此查询“gv('p').out('dep').filter{!it.outE('frnds').hasNext()}”以返回所有具有第一条边的子顶点(带有最高地图比率)在特定范围内,例如 0.5 到 0.7 之间?
    【解决方案2】:

    g.v('p').out('dep').filter{!it.outE('frnds').hasNext()}.range(0,100) 当您指定范围时,查询工作得更快。它将得到 100 个没有出边的顶点

    【讨论】:

      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2015-08-12
      • 1970-01-01
      • 2013-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多