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

基于Gremlin实现单候选人与其他候选人的技能匹配查询

Gremlin 候选人共同技能匹配查询实现

Schema可通过指定链接查看。

需求说明

  • 以指定imProfileId的候选人为基准(记为c1),对比其余所有候选人的技能集合
  • 仅返回与c1存在至少1项匹配技能的候选人
  • 返回字段包含:c1的userId、匹配候选人userId、双方匹配技能明细、匹配技能总数量
  • 最终结果按匹配技能总数量降序排序

原有参考查询问题

原有查询仅实现了匹配数量的统计,缺少c1 userId返回、匹配技能明细输出,也未做基准候选人自身的过滤。

优化后查询代码

g.V().has('Candidate','imProfileId','1000363')
  .as('c1')
  .out('HAS_SKILL')
  .aggregate('c1Skills')
  .in('HAS_SKILL')
  .where(neq('c1'))
  .group()
    .by(values('userId'))
    .by(__.out('HAS_SKILL').where(within('c1Skills')).values('skillName').fold())
  .unfold()
  .project('c1UserId','matchUserId','matchedSkills','matchCount')
    .by(select('c1').values('userId'))
    .by(select(keys))
    .by(select(values))
    .by(select(values).count(local))
  .order().by('matchCount', desc)

查询逻辑说明

  • 首先定位到imProfileId为1000363的基准候选人,标记别名为c1,方便后续读取其属性
  • 遍历c1关联的所有技能节点,聚合存入c1Skills集合作为匹配基准
  • 沿HAS_SKILL边反向遍历,找到所有持有c1技能的候选人,通过neq('c1')过滤掉基准候选人本人
  • 按候选人userId分组,分组时遍历每个候选人的自有技能,筛选出属于c1技能集合的条目,收集为匹配技能明细列表
  • 展开分组结果,投影出要求的四个返回字段
  • 最后按匹配技能数量降序排序,无匹配技能的候选人不会进入遍历结果,天然满足「至少1项匹配」的过滤要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:06:28