我有一个包含5亿个节点和边的Neo图。我想找到避开超级节点的两个节点之间的最短路径(即使这条路径比经过超级节点的路径要长)。
以下查询在较小的图形上运行良好,但对于我所处理的图形大小永远无法完成:
MATCH (n:Node { id:'123'}),(m:Node { id:'234' }), p = shortestPath((n)-[*..6]-(m))
WHERE NONE(x IN NODES(p) WHERE size((x)--())>1000)
RETURN p
如果我删除WHERE子句,它会非常快,通常是亚秒级别。
如何加速?预计算节点度数并对其进行索引是否有帮助?是否应该复制除超级节点相邻边以外的所有边,给它们一个新标签,并将它们用于我的shortestPath查询,而不使用WHERE子句?还有其他建议吗?