Neo4j最短路径(BFS)距离查询变量
我不认识Neo4j,所以,请容忍我。我有一个大的(1M节点)无向、未加权图。假设我神奇地将此图导入Neo4j。Neo4j查询引擎(cypher)能否支持以下类型的查询Neo4j最短路径(BFS)距离查询变量,neo4j,cypher,Neo4j,Cypher,我不认识Neo4j,所以,请容忍我。我有一个大的(1M节点)无向、未加权图。假设我神奇地将此图导入Neo4j。Neo4j查询引擎(cypher)能否支持以下类型的查询 范围查询。带上所有符合以下条件的me节点(及其距离) 距离特定节点3跳以内 带来最短路径(BFS)距离(因为图形是无向的 和未加权)在特定节点和一组节点之间 在特定节点和所有其他图形节点之间设置最短路径(BFS)距离 如果这些类型的查询实际上是可能的,没有递归类型的实现,而是直接从Cypher实现的,那么我应该期望什么类型的性
- 范围查询。带上所有符合以下条件的me节点(及其距离) 距离特定节点3跳以内
- 带来最短路径(BFS)距离(因为图形是无向的 和未加权)在特定节点和一组节点之间
- 在特定节点和所有其他图形节点之间设置最短路径(BFS)距离
如果这些类型的查询实际上是可能的,没有递归类型的实现,而是直接从Cypher实现的,那么我应该期望什么类型的性能(几秒钟、几秒钟或几分钟) 是的,cypher可以做所有这些事情 范围查询如下所示:
MATCH path=(a:MyNode { name: "Foo"})-[:myRelationshipType*1..20]->(b));
这将为您提供从MyNode到给定关系类型的1到20个跃点之间的所有“b”节点。匹配路径是一个变量,可以应用各种密码函数。所以对于每个路径,你可以问它是多长,中间是什么,等等。显示了应用于路径的函数,以了解如何使用它们
最短路径搜索并使用cypher中的shortestPath
和allshortestpath
函数
如果您想获得从图形中的某个部分到基本上所有其他部分的最短路径,可以在一个查询中完成;最短路径将从匹配“头”节点和“尾”节点开始。在寻找从一个事物到其他事物的最短路径的情况下,头节点匹配将是您感兴趣的节点,尾节点匹配将是“图中的任何节点”。例如,匹配(a:mynodeofinderest),(b),p=shortestPath((a)-[*]->(b))
。因此,您可以在一个查询中执行此操作,但是,如果您试图在一百万节点图中找到从一个对象到其他对象的最短路径,那么无论您使用什么图形数据库,这都需要一些时间
就性能而言,没有人能够真正准确地回答这个问题。这将取决于许多不同的因素,如:
谢谢你的回答。已经投了赞成票。但是a)范围查询是否实际包括哪个节点位于范围内最小距离的信息。例如:a)节点c=2跳,节点b=3跳。关于最短路径。我得到Neo4j给出了两个节点之间的最短路径。但是,当我想计算一个节点和所有其他图形节点之间的距离时,这是否意味着我必须总共进行100万次查询?更新答案以解决您的其他问题。看看,太好了。非常感谢你。这就是我需要知道的,类似的问题需要帮助