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

时间:2014-01-01 17:41:35

标签: graph neo4j relationship

我有朋友图数据库的典型朋友,即社交网络数据库。要求是将所有节点作为列表提取,使得连接最少的节点一起出现在列表中,并且连接最多的节点在列表中进一步分开。

基本上它要求将图表表示为列表,我不确定我们是否真的可以这样做。对于例如如果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个节点非常简单但节点很多 - 是否可以根据关系强度将它们放入列表中?

1 个答案:

答案 0 :(得分:1)

好的,我想这可能是你想要的。具有权重的shortestPath遍历的反转。如果没有,请告诉我输出应该如何。

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最短路径功能。