Neo4j正在尝试对来自第一个MATCH的结果执行第二个MATCH查询



在Neo4j中,我使用社区检测算法,只返回属于id为"10"的社区的节点和关系,如下所示。

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10
RETURN p

我现在想进一步过滤图形数据库的这一子集,并显示属于社区"10"的节点和关系,这些节点和关系的PageRank使用PageRank中心性算法确定,大于指定值,例如1。

我尝试使用以下方法:

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10 AND c.pagerank >1
RETURN p

但是,这不会返回所需的结果。如果与pagerank小于1的"场景"节点相关,则排除本身pagerank大于1的"功能"one_answers"要求"类型的节点,因为这些节点不满足MATCH子句。

我可以使用什么查询来仅显示属于社区"10"的pagerank大于1的节点,而与它们所连接的节点的pagerank无关。换句话说,即使它们连接到另一个节点,我也希望返回pagerank小于1的节点(如前一个代码示例中所示的"场景")。

如有任何协助,我们将不胜感激。

在不了解更多信息的情况下,我建议您创建一个具有id的节点Community,并将它们链接到Function、Requirement和Scenario。然后从那里开始。遍历将快得多。

match (:Community{Id:10})-[]-(x) 
where (x:Function or x:Req or req:Sec) and x.pagerank >...

用OR子句难道不能实现您想要的吗?

MATCH p=(a:Function)-[:BASED_ON]->(b:Requirement)-[:RESULT_OF]->(c:Scenario)
WHERE a.community = 10 AND b.community = 10 AND c.community = 10 AND (a.pagerank >1 OR b.pagerank >1 OR c.pagerank >1)
RETURN p

实现然后返回在其中一个节点上pagerank>1的结果?

最新更新