You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gremlin图数据库中查询人员间共同参与的事件数量

Gremlin 人员关联权重查询方案

核心逻辑

需求本质是计算Person顶点的二阶邻居(通过Event顶点间接关联)的重合度,我们可以通过一次Gremlin查询直接生成符合要求的返回结构,不需要二次加工。

完整查询语句

g.project('nodes', 'edges')
  // 生成nodes数组
  .by(
    V().hasLabel('Person')
      .project('id', 'label')
        .by(id)
        .by('name') // 若Person的显示名存储在其他属性,替换此处字段名即可
      .fold()
  )
  // 生成edges数组
  .by(
    V().hasLabel('Person').as('p1')
      // 找到p1参与的所有Event
      .out('Attends').hasLabel('Event')
      // 找到参与同一Event的其他Person
      .in('Attends').hasLabel('Person').as('p2')
      // 过滤自关联、避免A-B和B-A重复配对
      .where('p1', lt('p2')).by(id)
      // 按Person对分组,统计共同参与的Event数量
      .group()
        .by(select('p1', 'p2').by(id))
        .by(count())
      // 转换为要求的边格式
      .unfold()
      .project('from', 'to', 'label')
        .by(select(keys).select('p1'))
        .by(select(keys).select('p2'))
        .by(select(values))
      .fold()
  )

适配调整说明

  • 若你的Person顶点没有单独的显示名字段,直接把.by('name')替换为.by(id)即可直接用顶点id作为显示标签。
  • 若你需要返回双向边(同时存在A→B和B→A两条记录),删除.where('p1', lt('p2')).by(id)这一行即可。
  • 数据量较大时,建议给Attends类型的边添加关联索引,可大幅提升查询性能。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:36:02