我想执行无向遍历以提取通过某种关系连接的所有ID
当我执行以下查询时,它足够快地返回值
MATCH path=(s:Node {entry:"a"})-[:RelType*1..10]-(x:Node)
RETURN collect(distinct ID(x))
无论如何
MATCH path=(s:Node {entry:"a"})-[:RelType*]-(x:Node)
RETURN collect(distinct ID(x))
需要花费大量的时间.我怀疑通过使用*它搜索从s到x的每条路径,但由于我只想要id,所以这些路径可以被丢弃.我真正想要的是BFS或DFS搜索从s中查找连接节点.
两个查询都返回完全相同的结果,因为没有最短路径高于5的元素(仅在测试示例中!).
最佳答案 您是否在创建索引上添加了索引:节点(条目)?
此外,根据路径中每个节点的rel的数量,您可以获得可能返回的图表中的rel 10 ^(或一般rels ^步骤)路径.
你能先尝试一个较小的上限,比如3,并从那里开始工作吗?
当你获得周期时,离开方向真的很痛.
你还可以尝试做的是:
MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node)
RETURN ID(X)
并传输结果并在客户端中执行唯一性
或者如果你不想在客户端做唯一性
MATCH path=(s:Node {entry:"a"})-[:RelType*]->(x:Node)
RETURN distinct ID(X)