Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
neo4j节点间最短路径_Neo4j_Cypher_Shortest Path - Fatal编程技术网

neo4j节点间最短路径

neo4j节点间最短路径,neo4j,cypher,shortest-path,Neo4j,Cypher,Shortest Path,我必须找到两个节点之间的最短路径,其中包括路径中特定类型的节点 具有以下密码: Match p = shortestpath((E1:Entity{seq:"123"}) –[*]-(E2:Entity{seq:"456"}))) Where any(x in nodes(path) where x:T) Return path T:标签,可以是数百万个节点 数据库图形大小:4gb 问题是,它只在跳数限制为5时起作用,这是不够的 有没有关于如何重写优化的想法?当6个或更多跳数时,它会崩溃。这种

我必须找到两个节点之间的最短路径,其中包括路径中特定类型的节点

具有以下密码:

Match p = shortestpath((E1:Entity{seq:"123"}) –[*]-(E2:Entity{seq:"456"})))
Where any(x in nodes(path) where x:T)
Return path
T:标签,可以是数百万个节点 数据库图形大小:4gb

问题是,它只在跳数限制为5时起作用,这是不够的


有没有关于如何重写优化的想法?当6个或更多跳数时,它会崩溃。

这种查询的主要问题是,在遍历过程中无法截断路径……只有当路径最终在
E2
处结束时,您才会知道路径无效,因为这是您可以确定路径中没有节点是:t节点的唯一点

我所知道的唯一可能优化位的方法是确保在到达
E2
时停止所有扩展,因为现在的查询将找到所有路径,甚至是那些扩展到
E2
之后的路径,因为可能有一条路径穿过
E2
,到达:T节点,然后最终返回

不幸的是,优化不能用Cypher完成。最新版本的APOC程序(适用于Neo4j 3.3.x的APOC 3.3.0.2或适用于Neo4j 3.2.x的APOC 3.2.3.6)增强了路径扩展器程序,使其能够与端节点一起工作,我们可以将扩展配置为在到达端节点时终止,以便停止不必要的扩展(这假设通过E2然后返回的路径无效)

虽然这可能会有所帮助(至少在
E2
节点阻止扩展到图的更大部分的情况下),但使用
any()对类型没有任何限制的无界可变长度遍历
由于上述原因,谓词在大多数情况下不会很好地执行,尤其是在不存在此类路径的情况下

MATCH (E1:Entity{seq:"123"}), (E2:Entity{seq:"456"})
CALL apoc.path.expandConfig(E1, {terminatorNodes:[E2]}) YIELD path
WITH path
WHERE any(x in nodes(path) where x:T)
RETURN path
ORDER BY length(path) ASC
LIMIT 1