我想在一个较大的图上查询两种类型节点之间是否可达,目前写的查询语句较慢,有没有大佬帮忙看看能优化吗
发布于 3 年前 作者 thghxf123 495 次浏览 来自 问答

下面是我写的查询语句,图里有环的存在,刚开始学习neo4j,还有许多不懂,希望有大佬帮忙看看 match(a:M{lable:1}), (b:M{lable:2}) with collect(b) as nodes,a as m1 unwind nodes as m2 with m1,m2, case when m1 = m2 then 1 when exists((m2)-[*…12]->(m1)) then 1 else 0 end as value return m2.name,m1.name,value ORDER BY value DESC

7 回复

你的需求好模糊,为啥要这样操作

@pangguoming 我是把项目中的所有方法以及所调用库的方法作为节点存储,根据方法调用关系进行连接,这些方法中有些是漏洞方法,将其lable属性设置为1,本项目中的方法lable属性为2,我是想知道是否本项目的方法会调用到漏洞方法,所以查询语句主要是查询项目方法和漏洞方法之间是否存在调用路径。

@thghxf123 这个应用构思还挺不错的,类似软件包的依赖管理

match p= ((m2:label2)-[*…12]->(m1:label1) return p 这样就是查询 所有 label2节点到 label1节点的 12度以内路径,如果为空则不存在此类路径

@pangguoming 请问直接用cypher查路径会不会很慢呢?还有这里设置了度数,如果调用路径很长超过了12跳呢?

@thghxf123 兄弟,我有个需求跟你这个差不多啊,有没有空方便交流下~

@cplcg 路径越长就越慢,超过10逃就几乎不可用了,建议重新考虑图数据结构建模

回到顶部