首页 > 解决方案 > 通过图的最长路径

问题描述

我有一个包含 80k 节点和 180k 顶点的图,我想为其计算从开始到结束的前 5 个最长路径(基于属性)。我正在使用 Neo4j 4.3 社区版。

我有以下 Cypher 查询,但速度非常慢:

MATCH p = (a:Start)-[:FLOWS_TO*]->(b:Finish)
RETURN
  length(p)                                       AS steps
, reduce(sum=0, n in nodes(p) | sum + n.cost)     AS total_cost
ORDER BY
  total_cost DESC
LIMIT 5

所有中间节点都具有相同的标签。如果我运行EXPLAIN查询,我会看到一个包含 4250 亿行的中间步骤,这就是它如此慢的原因。不幸的是,我不知道最昂贵的路径有多长,所以我不能FLOWS_TO:1..X用 X 限制某个整数。

图中没有循环。

有没有办法加快查询速度或以更好的方式解决问题?

标签: neo4jcypher

解决方案


推荐阅读