如何在neo4j中获取两个连接节点的级别(深度)数
How to get level(depth) number of two connected nodes in neo4j
我正在使用 neo4j 作为图形数据库来将用户的连接详细信息存储到其中。在这里,我想显示一个用户相对于另一个用户在他们的连接(如 Linkedin)中的级别。例如-第一层连接,第二层连接,第三层和第三层以上显示3+。但我不知道如何使用 neo4j 发生这种情况。我搜索了这个但找不到任何解决方案。如果有人知道这个,请帮助我实现这个功能。
会是这样的
// get all persons (or users)
MATCH (p:Person)
// create a set of unique combinations , assuring that you do
// not do double work
WITH COLLECT(p) AS personList
UNWIND personList AS personA
UNWIND personList AS personB
WITH personA,personB
WHERE id(personA) < id(personB)
// find the shortest path between any two nodes
MATCH path=shortestPath( (personA)-[:LINKED_TO*]-(personB) )
// return the distance ( = path length) between the two nodes
RETURN personA.name AS nameA,
personB.name AS nameB,
CASE WHEN length(path) > 3 THEN '3+'
ELSE toString(length(path))
END AS distance
要找到2个人之间的最短"connection level",只需要得到最短路径并加1:
MATCH path = shortestpath((p1:Person)-[*..]-(p2:Person))
WHERE p1.id = 1 AND p2.id = 2
RETURN LENGTH(path) + 1 AS level
注意:您可能希望在 variable-length relationship 模式上设置一个合理的上限(例如,[*..6]
)以避免查询花费太长时间或 运行 大型数据库内存不足)。无论如何,您可能应该忽略非常远的连接。
我正在使用 neo4j 作为图形数据库来将用户的连接详细信息存储到其中。在这里,我想显示一个用户相对于另一个用户在他们的连接(如 Linkedin)中的级别。例如-第一层连接,第二层连接,第三层和第三层以上显示3+。但我不知道如何使用 neo4j 发生这种情况。我搜索了这个但找不到任何解决方案。如果有人知道这个,请帮助我实现这个功能。
会是这样的
// get all persons (or users)
MATCH (p:Person)
// create a set of unique combinations , assuring that you do
// not do double work
WITH COLLECT(p) AS personList
UNWIND personList AS personA
UNWIND personList AS personB
WITH personA,personB
WHERE id(personA) < id(personB)
// find the shortest path between any two nodes
MATCH path=shortestPath( (personA)-[:LINKED_TO*]-(personB) )
// return the distance ( = path length) between the two nodes
RETURN personA.name AS nameA,
personB.name AS nameB,
CASE WHEN length(path) > 3 THEN '3+'
ELSE toString(length(path))
END AS distance
要找到2个人之间的最短"connection level",只需要得到最短路径并加1:
MATCH path = shortestpath((p1:Person)-[*..]-(p2:Person))
WHERE p1.id = 1 AND p2.id = 2
RETURN LENGTH(path) + 1 AS level
注意:您可能希望在 variable-length relationship 模式上设置一个合理的上限(例如,[*..6]
)以避免查询花费太长时间或 运行 大型数据库内存不足)。无论如何,您可能应该忽略非常远的连接。