0

我有一个图表,其中显示了朋友和他们居住的城市的联系。朋友的联系用黑色箭头表示,城市的联系用虚线表示。我想得到住在一个共同城市的朋友的最长路径,在 A 先生和 D 先生之间。答案是路线:A-> B-> E-> D。应该为它写什么查询?

在此处输入图像描述

4

1 回答 1

1

本机查询(不使用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
于 2020-09-27T18:11:52.720 回答