是的,密码可以做所有这些事情。
范围查询是这个样子:
MATCH path=(a:MyNode { name: "Foo"})-[:myRelationshipType*1..20]->(b));
这就给了你所有的“B”的节点是1个20之间跳从与给定的关系类型MYNODE。匹配的路径是一个变量,可以应用各种密码功能。因此,对于每条路径,您可以问它是多久,中间是什么,等等。 cypher refcard显示适用于路径的函数,以了解您可以对它们执行的操作。
最短路径搜索can be found here并在密码中使用shortestPath
和allShortestPaths
函数。
如果你想从某件事物到图中所有其他事物的最短路径,你可以在一个查询中做到这一点;最短路径将从匹配“头”节点和“尾”节点开始。在找到从一件事到其他事物的最短路径的情况下,头节点匹配将成为您感兴趣的节点,并且尾节点匹配将是“图中的任何节点”。例如。 MATCH (a:MyNodeOfInterest), (b), p=shortestPath((a)-[*]->(b))
。所以你可以在一个查询中做到这一点,,但,如果你想在一百万个节点图中找到最短路径从一件事到一切,这将需要一些时间,无论你使用什么图形数据库使用。
在性能方面,没有人能真正准确地回答这个问题。这将取决于很多不同的因素,如:
- 总数据量
- 索引策略
- 您使用/滥用节点的标签,和关系类型
- 路径总长度
- JVM /内存/缓存配置。
谢谢你的回答。已经upvoted。但是a)范围查询实际上包括哪个节点处于该范围内的最小距离的信息。如:a)节点c = 2hops,节点b = 3hops。关于最短路径。我知道Neo4j给出了2个节点之间的最短路径。但是当我想计算节点和所有其他图形节点之间的距离时,这是否意味着我必须执行总共1M个查询? – Alexandros 2014-10-02 14:32:52
更新回答解决您的其他问题。一探究竟。 – FrobberOfBits 2014-10-02 14:38:17
非常好。非常感谢你。这就是我需要知道的 – Alexandros 2014-10-02 14:39:45