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

如何在Gremlin查询中按条件对groupCount()结果加权相乘

社交网络图中Profile排序的Gremlin查询实现

需求说明

社交网络图包含profile和post节点,profile节点支持4种边操作:关注其他profile(边类型follows_profile)、观看post、点赞post、发布post。需要给指定的target_profile对一组profile列表做排序:

  • 统计每个profile与target_profile的相似活动次数(即target执行过的操作,该profile也执行过的次数)
  • 若target_profile关注了该profile,则将其活动次数乘以3加权
  • 最终按加权后的结果降序排列

已实现的基础查询

  • 获取target_profile关注的指定列表内的profile:
g.V(TARGET_PROFILE).out('follows_profile').hasId(PROFILES_LIST)
  • 统计每个指定profile的相似活动次数:
g.V(TARGET_PROFILE).out().in().hasId(PROFILES_LIST).groupCount().by(T.id)

整合加权逻辑的完整查询

g.V(TARGET_PROFILE).as('source')
// 先收集目标关注的指定profile的ID列表
.out('follows_profile').hasId(PROFILES_LIST).id().fold().as('followedIds')
// 统计相似活动次数
.select('source').out().in().hasId(PROFILES_LIST)
.groupCount().by(T.id).as('activityCounts')
// 合并数据并计算加权值
.select('followedIds', 'activityCounts')
.unfold().select('activityCounts').unfold()
.map(
  project('id', 'weightedCount').by(keys).by(
    choose(contains('followedIds', keys), 
           values().multiply(3), 
           values())
  )
)
// 按加权次数降序排序
.order().by('weightedCount', desc)

逻辑说明

  1. 第一步先把target_profile关注的、在指定列表内的profile ID收集到followedIds列表中
  2. 第二步统计每个指定profile与target的相似活动次数,得到键值对形式的activityCounts
  3. 遍历activityCounts的每一项,判断当前profile ID是否在followedIds里:
    • 如果是,就把活动次数乘以3作为加权值
    • 如果不是,直接用原活动次数
  4. 最后按加权后的次数从高到低排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:22