Neo4j 按最短路径排序,不排除断开连接的节点

Neo4j 按最短路径排序,不排除断开连接的节点,neo4j,cypher,Neo4j,Cypher,我正在尝试在我的社交图中实现一个“查找你的朋友”功能,并使其尽可能方便用户。我希望通过最短路径对查询结果进行排序(以便已经在你的“朋友圈”中的人首先出现)。但是,如果您正在寻找的人与您当前的网络完全断开连接,则您尚未与之建立任何关系(即没有最短路径)的结果仍应包括在内 我当前的查询是(如果用户键入了“Bill”): 这将完成“按最短路径排序”,但将从结果中排除任何断开连接的节点 有没有一种方法可以说“按最短路径排序,除非没有路径,在这种情况下使用20的路径长度”呢? 或者“按最短路径排序,但如果

我正在尝试在我的社交图中实现一个“查找你的朋友”功能,并使其尽可能方便用户。我希望通过最短路径对查询结果进行排序(以便已经在你的“朋友圈”中的人首先出现)。但是,如果您正在寻找的人与您当前的网络完全断开连接,则您尚未与之建立任何关系(即没有最短路径)的结果仍应包括在内

我当前的查询是(如果用户键入了“Bill”):

这将完成“按最短路径排序”,但将从结果中排除任何断开连接的节点

有没有一种方法可以说“按最短路径排序,除非没有路径,在这种情况下使用20的路径长度”呢?
或者“按最短路径排序,但如果结果少于X,则忽略最短路径”

您需要为节点之间的路径使用可选匹配:

MATCH (u:User), (me:User)
WHERE u.first_name =~ '(?i)Bill.*'
OR u.last_name =~ '(?i)Bill.*' AND
me.user_id='someuserid1234'
OPTIONAL MATCH path=shortestPath((me)-[:WORKED_ON*]-(u))
RETURN u, coalesce(LENGTH(path), 20) as distance
ORDER BY distance ASC
MATCH (u:User), (me:User)
WHERE u.first_name =~ '(?i)Bill.*'
OR u.last_name =~ '(?i)Bill.*' AND
me.user_id='someuserid1234'
OPTIONAL MATCH path=shortestPath((me)-[:WORKED_ON*]-(u))
RETURN u, coalesce(LENGTH(path), 20) as distance
ORDER BY distance ASC