基于社交图谱的多层关系挖掘推荐

本文介绍了一种基于社交图谱的多层关系挖掘推荐方法,通过互动类关系统计推荐社交联系最紧密的人。文章详细阐述了实现思路,包括关系变量过滤、目标节点社交关系数量统计及更新,最后通过案例测试展示了查询优化过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、需求分析

1、推荐功能

根据多层人员互动类关系,推荐社交联系最紧密的前N个人。

2、亲密度衡量标准

通过互动类关系统计。

3、实现思路

1、从查询路径获取关系变量R单独过滤PATH(自定义过滤函数)
2、收集结果节点NODES并分别统计目标节点与源节点的社交关系数量(分组统计)
3、更新关系数量到目标节点
4、对目标节点排序输出生成推荐结果

二、案例测试

recommendPersonCommunicationNum属性表示当前源节点到各个目标节点可经过的路径数量。

1、准备样例数据

样例数据两层以内,路径数量116688条。
在这里插入图片描述

2、构建查询

针对两层内关系构建查询。

# CONSUM:三分钟内无结果
PROFILE
MATCH (n)-[:发出推荐|:技能背书人|:关注|:点赞|:评论|:发帖|:转推|:发推]-(m) WHERE id(n)=1959 AND zdr.apoc.relatCalculateRestrict(labels(m),labels(m),'LinkedinID||TwitterID||FacebookID||现实人员')=true WITH n,count(*) AS oneCount,id(m) AS oneId
MATCH (n)-[:发出推荐|:技能背书人|:关注|:点赞|:评论|:发帖|:转推|:发推]-()-[:发出推荐|:技能背书人|:关注|:点赞|:评论|:发帖|:转推|:发推]-(f) WHERE  zdr.apoc.relatCalculateRestrict(labels(f),labels(f),'LinkedinID||TwitterID||FacebookID||现实人员')=true WITH oneCount,oneId,count(*) AS twoCount,id(f) AS twoId
MATCH (one) WHERE id(one)=oneId SET one.recommendPersonCommunicationNum=oneCount WITH one,twoCount,twoId
MATCH (two) WHERE id(two)=twoId SET two.recommendPersonCommunicationNum=twoCount WITH one,two
WITH collect(one) AS oneList,collect(two) AS twoList
WITH zdr.apoc.mergeNodes([oneList,twoList]) AS nodes
UNWIND nodes AS node
RETURN node ORDER BY node.recommendPersonCommunicationNum DESC SKIP 0 LIMIT 10

在这里插入图片描述

3、优化

可支持两层以上关系,构建更优的查询。

# CONSUME:4s~5s
# 直接使用r变量:
MATCH (n)-[r*..2]-(m) WHERE id(n)=22 AND zdr.apoc.targetNodesRelasFilter(r,['发出推荐','技能背书人','关注','点赞','评论','发帖','转推','发推'],m,['LinkedinID','TwitterID','FacebookID','现实人员'])=true WITH m,count(r) AS count SET m.recommendPersonCommunicationNum=count RETURN m ORDER BY m.recommendPersonCommunicationNum DESC SKIP 0 LIMIT 10
# 使用relationships函数:
MATCH p=(n)-[*..2]-(m) WHERE id(n)=22 AND zdr.apoc.targetNodesRelasFilter(relationships(p),['发出推荐','技能背书人','关注','点赞','评论','发帖','转推','发推'],m,['LinkedinID','TwitterID','FacebookID','现实人员'])=true RETURN m.name,count(p) AS count SET m.recommendPersonCommunicationNum=count RETURN m ORDER BY m.recommendPersonCommunicationNum DESC SKIP 0 LIMIT 10

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

马超的博客

谢谢大佬的赞赏 :)

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值