Neo4j遍历性能

fxe*_*fxe 5 performance neo4j cypher

我想执行无向遍历来提取通过某种类型的关系连接的所有 id

当我执行以下查询时,它返回值的速度足够快

MATCH path=(s:Node {entry:"a"})-[:RelType*1..10]-(x:Node) 
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)

然而做

MATCH path=(s:Node {entry:"a"})-[:RelType*]-(x:Node) 
RETURN collect(distinct ID(x))
Run Code Online (Sandbox Code Playgroud)

需要大量的时间。我怀疑通过使用*它来搜索从 s 到 x 的每条路径,但由于我只想要 id,所以这些路径可以被丢弃。我真正想要的是 BFS 或 DFS 搜索来查找 s 中的连接节点。

两个查询返回完全相同的结果,因为没有最短路径大于 5 的元素(仅在测试示例中!)。

Mic*_*ger 2

您添加了索引吗create index on :Node(entry)

另外,根据路径中每个节点的 rels 数量,您将获得可能返回的图表中的 rels^10(或一般 rels^steps)路径。

您可以先尝试使用较小的上限(例如 3),然后从那里开始工作吗?

当你骑自行车时,离开方向真的很痛苦。

您还可以尝试做的是:

MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node) 
RETURN ID(X)
Run Code Online (Sandbox Code Playgroud)

并流式传输结果并在客户端中实现唯一性

或者如果您不想在客户端中实现唯一性,则可以这样做

MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node) 
RETURN distinct ID(X)
Run Code Online (Sandbox Code Playgroud)