求教各位大佬,巨大的有向图中的多点可达性问题,有没有效率高的查询语句
发布于 3 年前 作者 cplcg 556 次浏览 来自 问答

下面是需求:

  1. 有向图,有环,节点数很多,可能有十多万个甚至几十万个
  2. 已知一个点st,想求它到某种节点的路径,这种节点的name有固定的前缀
  3. 如果可以的话,希望找到st到这类节点的所有路径 直接用cypher里的match方法好像会非常的慢,工具apoc里一个很像的方法:apoc.path.expandConfig。 我想用这个方法固定起点,然后搜索路径,遇到某一类节点就停止,返回路径。这种节点可能是名字有相同的前缀,或者有相同的label等等。然后我尝试写了一个:
MATCH(p:Developer{id:"jack"})
MATCH(q:Code) WHERE q.id STARTS WITH "Github"
CALL apoc.path.expandConfig(p, {
    relationshipFilter: "Uses>",
    minLevel: 1,
    maxLevel: -1,
    terminatorNodes: [q]
})
YIELD path
RETURN path, length(path) AS hops
ORDER BY hops;

但是这个命令运行时间太久了,以至于无法忍受。想问问有没有别的更有效率的办法? 新手上路,请多指教,感激不尽!!!

3 回复

你要评估下结果集有多大呀,全路径检索很可能是你数据库总量的笛卡尔乘积那么大的结果集,任何数据库都无法返回这么大的结果集

@pangguoming 这个需求有可能有别的实现方式吗,我这里写的可能不好,先把所有名字带“Github”前缀的节点查出来,作为终止节点。 这种全路径检索有什么可以优化的思路吗?

neo4j 路径检索 默认 “目的节点也可以是路径内节点”,就是 路径遍历到目的节点后会再出去绕一圈再回来 这样也算一条路径。 为防止这种情况,你可以使用存储过程中的一个路径遍历过程试试,我不记得名字了,你自己搜搜

回到顶部