gpt4 book ai didi

java - gremlin 查询以检索在它们之间具有多条边的顶点

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:28 26 4
gpt4 key购买 nike

enter image description here

考虑上图。我想要一个 gremlin 查询,它返回所有节点,这些节点之间有多个边,如图所示。

此图是使用 neo4j 密码查询获得的:匹配 (d:dest)-[r]-(n:cust) WITH d,n, count(r) 作为流行 返回 d, n ORDER BY popular desc LIMIT 5

例如:RITUPRAKA... 和 Asia 之间有 8 条多边,因此查询返回了 2 个节点以及边,对于其他节点也是如此。

注意:图中还有其他节点,它们之间只有一条边,这些节点不会被返回。

我想在 gremlin 中做同样的事情。

我使用了以下查询g.V().as('out').out().as('in').select('out','in').groupCount().unfold().filter(select(values).is( gt(1))).select(键)

正在显示 输出:v[1234],输入:v[3456] .....

但我不想显示节点的 ID,而是想显示节点的值 喜欢出:ICIC1234,入:HDFC234

我已将查询修改为 g.V().values("name").as('out').out().as('in').values("name").select('out','in').groupCount().unfold().filter(select(values).is(gt(1))).select(keys)

但是报classcastException之类的错误,要遍历的每个顶点都使用索引进行快速迭代

最佳答案

你的图表似乎没有表明双向边是可能的,所以我会考虑到这个假设来回答。这是一个简单的示例图表 - 请考虑包括一个关于 future 问题的图表,因为它比图片和文本描述更容易让那些阅读您的问题的人理解并开始编写 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()计算标记为“out”和“in”的顶点出现的次数(即它们之间的边数)。它使用 unfold()遍历 Map<Vertex Pairs,Count> (或更确切地说 <List<Vertex>,Long> )并过滤掉计数大于 1 的那些(即多边)。 final select(keys)删除“计数”,因为不再需要它(即我们只需要保存结果顶点对的键)。

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

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超过一个人Vertexby() 结束时有资格进行垃圾收集(或者基本上是每个初始顶点处理)。

关于java - gremlin 查询以检索在它们之间具有多条边的顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44322342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com