如何解决获得具有公共节点的两个节点之间的最长路径
我有一个图表,其中显示了朋友及其居住城市的联系。朋友的联系通过黑色箭头指定,城市的联系以虚线指定。 我想让生活在A先生和D先生之间的共同城市中的朋友走的路最长。 答案就是路线:A-> B-> E->D。 应该为此写什么查询?
解决方法
本地查询(不使用APOC附加组件):
MATCH path = (city:City)<-[:LIVES_IN]-(:Person)-[:KNOWS*]->(:Person)-[:LIVES_IN]->(city)
WHERE ALL(person IN nodes(path)[2..-2] WHERE (person)-[:LIVES_IN]->(city))
RETURN nodes(path)[1..-1]
ORDER BY length(path) DESC
LIMIT 1
要搜索特定城市(例如P1)的最长路径,请将第一行更改为:
MATCH path = (city:City {name: "P2"})<-[:LIVES_IN]-(:Person)-[:KNOWS*]->(:Person)-[:LIVES_IN]->(city)
APOC版本的性能可能更高,但是说实话,它需要进行衡量。可能性之一:
MATCH (person:Person)-[:LIVES_IN]->(city:City)
WITH city,collect(person) AS persons
CALL apoc.path.expandConfig(persons,{
relationshipFilter: "KNOWS>",whitelistNodes: persons,minLevel: 1
})
YIELD path
RETURN nodes(path)
ORDER BY length(path) DESC
LIMIT 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。