【发布时间】:2017-11-21 06:34:33
【问题描述】:
希望了解是否可以采取任何措施使下面的查询在大图上表现出色。我试图找到两个节点之间的最短路径,但排除包含某些其他类型节点的路径。问题似乎是 WHERE 子句。下面的查询完全停止了。
MATCH p=shortestPath((p1:Party{suprRC:"21"})-[*..15]-(p2:Party{suprRC:"21"}))
WITH p
WHERE NONE(n in nodes(p) where labels(n) in [["Reporter"],["FirstName"],["LastName"]])
RETURN p limit 500;
【问题讨论】:
-
您可以直接在 MATCH 上尝试 WHERE(换句话说,不要使用 WITH p)。
-
感谢汤姆的建议 - 恐怕它没有帮助。
-
几个问题...... 1)起始节点和结束节点......相同吗? suprRC 是 Party 的独特属性吗?如果没有,是否在 suprRC 上索引了 Party 节点(我知道这应该很明显,我只是在这里排除选项)?当您只执行 MATCH (使用 RETURN 和 LIMIT 但没有 WITH 和 WHERE)时......那是高性能的吗?你能分享这个查询的 EXPLAIN 的输出吗?
-
Hi Tom - 1) 起始节点和结束节点不相同。 suprRC 对于一个派对来说并不是唯一的。我还没有为派对节点建立索引——我知道我应该这样做,但是由于当我添加过滤节点标签路径的片段时查询会终止,我有理由相信这不是问题。当我省略 WHERE 和 WITH 部分时,它非常高效。事实上,最后两个节点排除项,尤其是“FirstName”,会影响性能。
-
看起来我还不能向 SO 添加图像。它足够短,这是我的 ascii 版本:
标签: neo4j shortest-path