Graph 如何用密码写这个

Graph 如何用密码写这个,graph,neo4j,cypher,Graph,Neo4j,Cypher,我的图形数据库(Neo4j)中大约有644个节点。我需要计算所有这些644个节点之间的距离,并在GUI中直观地显示它。我希望在数据库中预先计算并存储每两对节点之间的距离,而不是在服务器上检索节点,然后动态查找它们之间的距离,然后在GUI上显示 我想了解如何用CYPHER编写这样的查询。请让我知道。我认为这可以奏效: // half cross product match (a),(b) where id(a) < id(b) match p=shortestPath((a)-[*]-(b)

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

我想了解如何用CYPHER编写这样的查询。请让我知道。

我认为这可以奏效:

// 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)
//半叉积
比赛(a)、(b)
其中id(a)(b)
设置4950个属性,创建4950个关系,在4328毫秒内返回0行

但是浏览器viz会因此爆炸,正如你所知

关于您的距离测量(速度不会那么快,但应该有效):

匹配(a:User)-[:READ]->(book)()作为一个u READ,
长度(b-[:READ]->())为b_READ
创建唯一的(a)-[:距离{距离:公共/(a_-read+b_-read-common)}]-(b)

距离在图形中的含义是什么?是节点之间最短路径中的关系数吗?或者它是某种关系属性的函数,最便宜的路径还是他们所说的“加权最短路径”?距离是两个节点之间的相似性度量。为了清楚起见,让我们举一个例子。有两种节点。一个是用户,另一个是书籍。假设约翰读10本书,萨姆读5本书。在这两本书中,4本书是常见的,那么约翰和萨姆之间的距离是4/(10+5-4),即4/11。在我的应用程序中,我有644个用户和86000本书。我需要在所有的书中找到这样的相似之处。我想存储所有距离(相似性),因为图中边的权重距离是两个节点之间的相似性度量。为了清楚起见,让我们举个例子。有两种节点。一个是用户,另一个是书籍。假设约翰读10本书,萨姆读5本书。在这两本书中,4本书是常见的,那么约翰和萨姆之间的距离是4/(10+5-4),即4/11。在我的应用程序中,我有644个用户和86000本书。我需要在所有的书中找到这样的相似之处。我想将所有距离(相似性)存储为图中边的权重
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)