在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的结果?