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

Gremlin如何统计公共顶点数、排序结果并返回公共技能列表

Schema与需求说明
  • 节点类型:
    • Student:主键为id
    • Skill:主键为SkillName
  • 关联关系:Student通过出边HAS_SKILL关联到自己掌握的Skill节点
  • 查询目标:给定学生ID,返回技能匹配度最高的相似学生、双方公共技能数量、公共技能明细列表
原有查询的缺陷

你写的查询仅聚合了HAS_SKILL边做数量统计,遍历过程中没有留存公共技能的属性数据,因此无法返回技能列表;另外缺少排除目标用户自身的逻辑,会把查询目标本人作为匹配度最高的结果返回,属于无效数据。

改造后的查询代码
g.V().has('Student','id','test1').as('target').
  out('HAS_SKILL').as('commonSkill').
  in('HAS_SKILL').
  where(neq('target')).
  group().
    by(values('id')).
    by(select('commonSkill').values('SkillName').fold()).
  unfold().
  project('similarStudentId', 'commonSkillCount', 'commonSkillList').
    by(select(keys)).
    by(select(values).count(local)).
    by(select(values)).
  order().
    by('commonSkillCount', desc)

注:如果你的Student节点存储用户唯一标识的字段为userId而非id,将分组逻辑里的by(values('id'))替换为by(values('userId'))即可。

改造逻辑说明
  1. 给起始查询的目标学生打target标签,后续通过where(neq('target'))过滤掉学生本人,避免无效结果
  2. 遍历到目标学生掌握的技能节点时,打commonSkill标签留存技能节点
  3. 调整分组聚合逻辑:不再收集关联边,而是直接收集每条匹配路径上的公共技能名称,聚合为列表
  4. 结果投影阶段,直接取分组聚合得到的技能列表作为公共技能明细输出,对该列表做本地计数即可得到公共技能数量,和原有计数逻辑结果完全一致
  5. 最终按公共技能数量倒序排序,排名最靠前的就是技能匹配度最高的相似用户

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:09:23