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 v2.0.3。密码:路径请求返回“;未知错误“;_Neo4j_Cypher - Fatal编程技术网

Neo4J v2.0.3。密码:路径请求返回“;未知错误“;

Neo4J v2.0.3。密码:路径请求返回“;未知错误“;,neo4j,cypher,Neo4j,Cypher,Neo4j v2.0.3 在具有30000个节点的图形中,尝试使用命令获取节点的路径时: MATCH p = (n {id: 'x2116500'})-[*]-(m) RETURN nodes(p) as nodes; Cypher Web应用程序返回“未知错误”。但是,在一个有15个节点的数据库上,此请求按预期工作 但要求: MATCH p = (n {id: 'x2116500'})-[r]-(m) RETURN nodes(p) as nodes 返回一些节点,但不是路径中的所有节点。

Neo4j v2.0.3

在具有30000个节点的图形中,尝试使用命令获取节点的路径时:

MATCH p = (n {id: 'x2116500'})-[*]-(m) RETURN nodes(p) as nodes;
Cypher Web应用程序返回“未知错误”。但是,在一个有15个节点的数据库上,此请求按预期工作

但要求:

MATCH p = (n {id: 'x2116500'})-[r]-(m) RETURN nodes(p) as nodes
返回一些节点,但不是路径中的所有节点。从路径获取关系的类似请求也会发生相同的错误,此请求失败:

MATCH p = (n {id: 'x2116500'})-[*]-(m) RETURN relationships(p) as rels ;
这将返回一些关系,但不是路径中的所有关系:

MATCH p = (n {id: 'x2116500'})-[r]-(m) RETURN relationships(p) as rels ;

[r]
语法(不带星号)意味着在每个匹配路径中只需要一个关系,因此使用
[r]
的两个备选查询不应返回所有关系(在多关系路径中)。因此,这两个查询按预期工作

对于带有
[*]
的查询,请确保路径中没有循环。下面是一个循环路径的示例:

(a)-[r1]->(b)-[r2]->(c)-[r3]->(d)-[r4]->(c)
上述路径有3个非循环关系。如果您不希望任何非循环路径具有超过(例如)4个关系,则可以使用以下查询来获取该路径中的不同节点,即使循环是可能的:

MATCH p = ({id: 'x2116500'})-[r*1..4]-()
RETURN DISTINCT nodes(p) as nodes;
此查询也更有可能完成(而不是永远运行或内存不足)


此外,为了加快查询速度,您应该标记开始节点,并使用该标签和
id
属性创建索引。

您的第一次查询可能会生成数百万条路径。这需要一段时间来计算。浏览器当前在60秒后超时

首先,您应该使用标签,并在:Label(id)上有索引或约束。

尝试将最大步长或最大路径限制为合理值

//max steps
MATCH p = (n:Label {id: 'x2116500'})-[*..5]-(m) RETURN nodes(p) as nodes;

//max-paths
MATCH p = (n:Label {id: 'x2116500'})-[*]-(m) RETURN nodes(p) as nodes limit 1000;
关系也是如此

请注意,此查询仅从节点n到m执行一个步骤

如果已知节点
n
m
,也可以在这两个节点之间使用类似
shortestPath
的函数

MATCH p = shortestPath(n:Label {id: 'x2116500'})-[*]-(m:Label {id:'x3116600'}) 
RETURN nodes(p) as nodes;

是否有任何其他密码查询可以通过所有可能的关系(包括循环中的节点和关系)连接所有节点?请参阅我修改的答案为什么您认为
第一次查询可能会产生数百万条路径?我使用的图形最多有10个节点。另外,请解释为什么使用标签和索引如此重要?@cybersam使用[r*.N]和
limit
我发现使用我的DB请求只能使用
limit
<20和[r*.5]关系。使用更大的
限制
请求不会返回。有什么想法吗?