【问题标题】:Gremlin: Count connections ignoring edges with a parallel edge in the opposing directionGremlin:计数连接忽略在相反方向具有平行边缘的边缘
【发布时间】:2017-09-28 05:14:34
【问题描述】:

我目前正在处理一个表示顶点之间连接的图表。顶点可以在两个方向上连接。我有兴趣知道有多少顶点相互连接,无论连接的方向如何,或者是否存在两个方向的连接。

因此,例如,在下面绘制的图中,连接顶点的总数将为 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 查询的复杂性时,如果能得到你们的帮助会很棒!

【问题讨论】:

    标签: gremlin gremlin-server janusgraph


    【解决方案1】:

    您可以通过两个顶点 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
    

    【讨论】:

    • 这是一个很棒而优雅的查询。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    相关资源
    最近更新 更多