Neo4j 分析依赖系统的密码查询
我需要创建一个查询来分析包依赖关系图。 有不同类型的包(修补程序、featurepack、servicepack) 该图在节点深度方面可能非常复杂。 目前我尝试使用下面的查询,但它不起作用Neo4j 分析依赖系统的密码查询,neo4j,cypher,Neo4j,Cypher,我需要创建一个查询来分析包依赖关系图。 有不同类型的包(修补程序、featurepack、servicepack) 该图在节点深度方面可能非常复杂。 目前我尝试使用下面的查询,但它不起作用 START n = node(1501) // package A MATCH n-[:DEPENDS_ON*]->b WHERE NOT(b<-[:REPLACES*]-()) // an indirect dependency package is replaced. // so it
START n = node(1501) // package A
MATCH n-[:DEPENDS_ON*]->b
WHERE NOT(b<-[:REPLACES*]-()) // an indirect dependency package is replaced.
// so it has to be filtered but, the replacing package must be a dependency of A.
RETURN DISTINCT b, b.full_name, b.created?
ORDER BY b.created?
START n=node(1501)//包A
匹配n-[:取决于*]->b
WHERE NOT(b您可以将WHERE子句中的过滤条件更改为
WHERE NOT(b<-[:DEPENDS_ON*0..]-()<-[:REPLACES*]-()<-[:DEPENDS_ON*]-n)
WHERE NOT(b我想我找到了一种更快的方法,在我的案例中效果很好
MATCH p-[DEPENDS_ON*]->()-[:REPLACES*]->()-[:DEPENDS_ON*0..]->r
WITH p, collect(r) AS replaces
MATCH p-[:DEPENDS_ON*]->d
WHERE p.name = 'A' AND NOT (d IN replaces)
RETURN DISTINCT d, d.name
@Lisa您的查询对我学习Cypher有很大帮助。再次感谢。您好,感谢您的回答。实际上,它只返回了第一级包,而不是间接依赖于包。而且它花费了太多时间(约63000毫秒)。我可以看到性能很差,因为有太多可变长度路径模式。如果您事先知道一些长度,指定固定长度将提高性能。我不确定我是否理解仅获取直接依赖包的问题,因为它确实会返回示例的预期结果。我在此处创建了一个控制台,以便您可以ee查询和结果..也许您是通过在不同的数据集上应用查询来解决问题的?非常感谢您提供的伟大示例。实际上,我在将其应用于实际用例时遇到问题。我不明白是什么原因导致我的结果只包含一级包。您的查询工作正常,但我是我花时间验证数据库的结果。再次感谢。
MATCH p-[DEPENDS_ON*]->()-[:REPLACES*]->()-[:DEPENDS_ON*0..]->r
WITH p, collect(r) AS replaces
MATCH p-[:DEPENDS_ON*]->d
WHERE p.name = 'A' AND NOT (d IN replaces)
RETURN DISTINCT d, d.name