双检索 JAVA_java-gremlin查询以检索顶点之间具有多个边的...

您的图表似乎并未表明双向边缘是可能的,因此我将牢记这一假设.这是一个简单的示例图-请考虑包括一个有关未来问题的图,因为它比图片和文字描述容易得多,对于那些阅读您的问题的人来说,理解并开始编写Gremlin遍历可以帮助您:

g.addV().property(id,'a').as('a').

addV().property(id,'b').as('b').

addV().property(id,'c').as('c').

addE('knows').from('a').to('b').

addE('knows').from('a').to('b').

addE('knows').from('a').to('c').iterate()

因此,您可以看到顶点“ a”具有到“ b”的两个出射边和到“ c”的一个出射边,因此我们应该得到“ a b”顶点对.一种实现方法是:

gremlin> g.V().as('out').out().as('in').

......1> select('out','in').

......2> groupCount().

......3> unfold().

......4> filter(select(values).is(gt(1))).

......5> select(keys)

==>[out:v[a],in:v[b]]

上面的遍历使用groupCount()来计算“出”和“入”标记的顶点出现的次数(即它们之间的边数).它使用unfold()遍历< Vertex Pairs,Count>的映射. (或更确切地说是< List< Vertex>,Long>)并滤除计数大于1的那些(即多个边).最终的select(keys)删除了“ count”,因为它不再需要了(即,我们只需要保存顶点对的键即可得到结果).

也许另一种方法是使用这种方法:

gremlin> g.V().filter(outE()).

......1> project('out','in').

......2> by().

......3> by(out().

......4> groupCount().

......5> unfold().

......6> filter(select(values).is(gt(1))).

......7> select(keys)).

......8> select(values)

==>[v[a],v[b]]

这种使用project()的方法放弃了整个图上对大groupCount()的更大内存需求,转而在单个顶点上构建一个较小的Map,从而可以在by()的末尾(或基本上每个初始顶点已处理).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值