Neo4J - 根据关系强度将图形提取为列表



我有一个典型的朋友图数据库,即社交网络数据库。要求是将所有节点提取为一个列表,以便连接最少的节点一起显示在列表中,而连接最多的节点在列表中相距更远。

基本上,它要求将图形表示为列表,我不确定我们是否真的可以做到这一点。例如,如果 A 与强度为 10 的 B 相关,B 与强度为 80 的 C 相关,则 A 与 C 相关为 20那么如何将其放在列表中?A, B, C - 否,因为 A 与 C 的距离相对大于 B 而事实并非如此A,C,B - 是的,因为A和B的相关性不如A,C和C,B。

有 3 个节点非常简单,但有很多节点 - 是否可以根据关系强度将它们放在列表中?

好的,我想这可能是你想要的。使用权重的最短路径遍历的反函数。如果没有,请告诉我输出应该如何。

http://console.neo4j.org/r/n8npue

MATCH p=(n)-[*]-(m) // search all paths
WHERE n <> m
  AND ALL (x IN nodes(p) WHERE length([x2 IN nodes(p) WHERE x2=x])=1) // this filters simple paths
RETURN [n IN nodes(p)| n.name] AS names, // get the names out
  reduce(acc=0, r IN relationships(p)| acc + r.Strength) AS totalStrength // calculate total strength produced by following this path
ORDER BY length(p) DESC , totalStrength ASC // get the max length (hopefully a full traversal), and the minimum strength
LIMIT 1

这对于大型图形来说不会有效,但我认为这绝对是可行的 - 如果您需要大型图形的速度,可能需要使用遍历/graphalgo API 最短路径功能。

最新更新