如何在Cypher中写这个

时间:2014-04-04 21:47:22

标签: graph neo4j cypher

我的图形数据库(Neo4j)中有大约644个节点。我需要计算所有这644个节点之间的距离,并在GUI中直观地显示它。我想预先计算和存储数据库本身中每两对节点之间的距离,而不是将节点检索到服务器上,然后在运行中找到它们之间的距离,然后在GUI上显示。

我想了解如何在CYPHER中编写这样的查询。请告诉我。

1 个答案:

答案 0 :(得分:1)

我认为这可行:

// half cross product
match (a),(b)
where id(a) < id(b)
match p=shortestPath((a)-[*]-(b))
with a,b,length(p) as l
create (a)-[:DISTANCE {distance:l}]->(b)

设置4950属性,创建4950个关系,在4328毫秒内返回0行

但是,只要您知道,浏览器即会爆炸。

关于你的距离测量(它不会那么快但应该有效):

MATCH (a:User)-[:READ]->(book)<-[:READ]-(b:User)
WITH a,b,count(*) as common,
     length(a-[:READ]->()) as a_read,
     length(b-[:READ]->()) as b_read
CREATE UNIQUE (a)-[:DISTANCE {distance:common/(a_read+b_read-common)}]-(b)