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

Neo4j多关系二分图转单分图及关联边权重计算方法咨询

Neo4j二分图转多关系单分图实现方案

方案1:直接用Cypher生成物理RELATED_TO边

无需依赖GDS库,直接把共现关系写入图库:

  1. 先清理已有的RELATED_TO边(避免重复写入)
MATCH ()-[r:RELATED_TO]->() DELETE r;
  1. 匹配所有符合要求的实体共现路径,统计权重后写入边
MATCH path = (e1:Entity)-[*]->(e2:Entity)
// 过滤规则:路径中间节点全部为Post类型,无其他实体
WHERE ALL(node IN nodes(path)[1..-1] WHERE node:Post)
// 避免重复统计:排除自环,且仅统计e1 id小于e2 id的对,避免双向重复
AND id(e1) < id(e2)
// 可选:限制路径最大长度,比如最多经过2个Post节点可加 AND length(path) <=3
WITH e1, e2, count(path) AS cooccur_weight
MERGE (e1)-[r:RELATED_TO]-(e2)
SET r.weight = cooccur_weight;

这个方案会自动适配你提到的所有路径场景,不管中间是1个还是多个Post、不管路径中的关系类型是什么,只要满足中间节点都是Post的要求,都会被统计为一次共现计入权重。

方案2:用GDS库生成虚拟单分图(适合做图分析不需要物理存边的场景)

如果只是临时用单分图跑算法,不需要把关系持久化到图库,可以用GDS的二分图投影功能直接生成虚拟图:

  1. 先把原始二分图投影到GDS的图目录
CALL gds.graph.project(
  'entity_bipartite_graph',
  ['Entity', 'Post'],
  // 这里列全所有你需要纳入统计的关系类型
  ['TWEETED', 'AT_MENTIONED', 'QUOTE_TWEETED', 'PUBLISHED', 'MENTIONS']
) YIELD graphName, nodeCount, relationshipCount;
  1. 生成单分图投影,直接获取实体对和共现权重
CALL gds.alpha.bipartite.projection.stream('entity_bipartite_graph', {
  nodeProjection: 'Entity',
  relationshipProjection: {
    RELATED_TO: {
      type: '*',
      orientation: 'UNDIRECTED',
      aggregation: 'COUNT'
    }
  }
}) YIELD sourceNodeId, targetNodeId, count
// 拿到结果后可以直接用于后续分析,也可以选择写入物理边
WITH gds.util.asNode(sourceNodeId) AS e1, gds.util.asNode(targetNodeId) AS e2, count AS weight
MERGE (e1)-[r:RELATED_TO]-(e2)
SET r.weight = weight;

可选调整规则

  • 如果需要区分不同路径的权重,比如经过1个Post的共现权重为1,经过2个Post的权重为0.5,只需要把count(path)替换为sum(CASE WHEN length(path) = 2 THEN 1 WHEN length(path) =3 THEN 0.5 ELSE 0 END)即可
  • 如果不需要跨Post的共现(也就是你举的第二个QUOTE_TWEETED的场景不需要统计),直接加length(path) = 2的过滤条件即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:01