Neo4J获取通过特定节点的节点之间的最短路径
我们有一个Neo4J数据库,用于跟踪为公司工作的人员。总体结构如下:-Neo4J获取通过特定节点的节点之间的最短路径,neo4j,cypher,shortest-path,Neo4j,Cypher,Shortest Path,我们有一个Neo4J数据库,用于跟踪为公司工作的人员。总体结构如下:- (Person)-[:WORKS_AT]->(Company) 一个人可以同时做多份工作,每个公司可以有多个人 给定2个公司(公司1和公司2),我们可以使用- match (start:Company {id:1}),(end:Company {id:2}), p = shortestPath((start)-[:WORKS_AT*]-(end)) return * 我们要做的是计算两个公司之间的最短路径,该路径包
(Person)-[:WORKS_AT]->(Company)
一个人可以同时做多份工作,每个公司可以有多个人
给定2个公司(公司1和公司2),我们可以使用-
match (start:Company {id:1}),(end:Company {id:2}), p = shortestPath((start)-[:WORKS_AT*]-(end)) return *
我们要做的是计算两个公司之间的最短路径,该路径包括特定人员,例如-
(Company 1)-(Person 1)-(Company 4)-(Person 2)-(Company 2)
如果我们想通过Person 2连接,将返回而不是以下内容-
(Company 1)-(Person 3)-(Company 2)
我已尝试在中实现该建议,但它返回了一个错误-
最短路径算法在开始和结束节点
都是一样的。如果执行最短路径搜索,可能会发生这种情况
在笛卡尔积之后,可能具有相同的开始和结束节点
对于传递给最短路径的某些行。如果你不愿意的话
体验这个例外,并能接受失踪的可能性
结果对于这些行,在Neo4j配置中通过
将cypher.禁止最短路径\u公共\u节点设置为false。如果你
无法接受缺少的结果,并且确实需要最短的路径
在两个公共节点之间,然后使用标准
密码可变长度模式表达式,后跟路径排序
长度和限制为一个结果
编辑:链接了错误的文章-应该是
我们尝试运行的失败查询是-
match(s:Company{ID:1})
match(f:Company{ID:2})
match (n:Person) where n.id in [2]
with collect(n) as wps
match path=allshortestPaths((s)-[:WORKS_AT*]->(f))
where ANY ( n in wps WHERE n in nodes(path) ) return *
能否显示失败的查询?