gpt4 book ai didi

neo4j - 密码查询一组节点之间的最短路径

转载 作者:行者123 更新时间:2023-12-04 19:32:46 25 4
gpt4 key购买 nike

我正在尝试计算一个密码查询以确定一组节点之间的最短路径,例如如下标识的集合,

MATCH (u:User) WITH u ORDER by u.score DESC LIMIT 10 RETURN u

假设图形的形式

(:User)-[:Owns]-(:Box)

第一个限制是我只想返回匹配第一个查询的用户之间的路径。

第二个限制是我不想在用户集中只有一个用户链接的地方包含 Box 元素。我只对 Box 元素感兴趣,其中有多于一个匹配的拥有该 Box 的用户。可能还有其他未选择的用户链接到 Box,但我对他们不感兴趣。

从某种意义上说,在我看来,我正在寻求提取链接匹配用户集的所有节点/路径的子网,但我是 Cypher/Neo4j 的新手,无法解决这个问题。

感谢收到的任何指示。

最佳答案

MATCH (u:User)
WITH u ORDER by u.score DESC LIMIT 10
WITH collect(ID(u)) AS user_ids
MATCH (user1:User), (user2:User)
MATCH path=allShortestPaths((user1)-[*0..3]-(user2))
WHERE ID(user1) IN user_ids AND ID(user2) IN user_ids AND user1 <> user2
RETURN path

您可以增加可变路径长度(在本例中为 3),但性能可能会迅速下降,具体取决于您的网络。

上面的查询不会过滤掉包含 Box 元素的路径,这些元素只匹配一个以上的用户。如果您只想通过一个框获得直接链接,那就容易多了,尽管我不确定这是否是您想要的。如果是,你可以这样做:

MATCH (u:User)
WITH u ORDER by u.score DESC LIMIT 10
WITH collect(ID(u)) AS user_ids
MATCH path=(user1:User)-[:Owns]-(box:Box)-[:Owns]-(user2:User)
WHERE ID(user1) IN user_ids AND ID(user2) IN user_ids AND user1 <> user2
RETURN path, user1, box, user2

老实说,也许这就是您想要的。您可能需要在查询返回后处理结果。我想这取决于你对他们做什么;)

关于neo4j - 密码查询一组节点之间的最短路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33121225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com