Gremlin 小精灵:计算忽略边的连接数,边在相反方向上平行

Gremlin 小精灵:计算忽略边的连接数,边在相反方向上平行,gremlin,gremlin-server,janusgraph,Gremlin,Gremlin Server,Janusgraph,我目前正在使用一个表示顶点之间连接的图形。顶点可以在两个方向上连接。我感兴趣的是知道有多少个顶点相互连接,而不管连接的两个方向,或者连接是否存在于两个方向 例如,在下面绘制的图中,连接顶点的总数为3(而简单的边计数会告诉我们有4个) 由于边缘的方向性,这与Tinkerpop配方提供的重复边缘检测所解决的问题不同。是否有一个小精灵查询可以帮助进行此计数 我在下面提供了一些示例数据: vertex1 = graph.addVertex(“example","vertex1&qu

我目前正在使用一个表示顶点之间连接的图形。顶点可以在两个方向上连接。我感兴趣的是知道有多少个顶点相互连接,而不管连接的两个方向,或者连接是否存在于两个方向

例如,在下面绘制的图中,连接顶点的总数为3(而简单的边计数会告诉我们有4个)

由于边缘的方向性,这与Tinkerpop配方提供的重复边缘检测所解决的问题不同。是否有一个小精灵查询可以帮助进行此计数

我在下面提供了一些示例数据:

vertex1 = graph.addVertex(“example","vertex1")
vertex2 = graph.addVertex("example","vertex2")
vertex3 = graph.addVertex("example","vertex3")
vertex4 = graph.addVertex("example","vertex4")

vertex1.addEdge("Connected_to",vertex2)
vertex2.addEdge("Connected_to",vertex1)
vertex2.addEdge("Connected_to",vertex3)
vertex3.addEdge("Connected_to",vertex4)
我不熟悉Gremlin语言,在创建计算顶点之间连接数的查询时遇到困难。在我掌握图形查询的复杂性时,如果能得到你们的帮助,那就太好了!

你可以
重复数据消除()
按两个顶点id排序。只需确保两个顶点的顺序一致(例如按其id排序),以便边缘方向不受影响

gremlin> g.E()
==>e[8][0-Connected_to->2]
==>e[9][2-Connected_to->0]
==>e[10][2-Connected_to->4]
==>e[11][4-Connected_to->6]
gremlin> g.E().dedup().by(bothV().order().by(id).fold())
==>e[8][0-Connected_to->2]
==>e[10][2-Connected_to->4]
==>e[11][4-Connected_to->6]
gremlin> g.E().dedup().by(bothV().order().by(id).fold()).count()
==>3

这是一个伟大而优雅的问题。谢谢!