我目前正在使用指示顶点之间连接的图表。顶点可以在两个方向上连接。我有兴趣知道有多少顶点相互连接,无论连接方向如何,或者两个方向上是否存在连接。
因此,例如,在下面描绘的图表中,连接顶点的总数将是3(而简单的边缘计数将告诉我们有4个边缘)。
由于边缘的方向性,这不是由Tinkerpop食谱提供的重复边缘检测解决的问题。是否存在可以帮助计算的Gremlin查询?
我在下面列出了一些示例数据:
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语言的新手,我在创建一个计算顶点之间连接数的查询时遇到了麻烦。当我掌握Graph查询的复杂性时,从你们那里得到一些帮助会很棒!
答案 0 :(得分:2)
您可以通过两个顶点ID dedup()
。只需确保两个顶点的顺序一致(例如按其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