首页 > 解决方案 > 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 的 'Scenario' 节点相关,则排除本身具有大于 1 的 pagerank 类型的 'Function' 和 'Requirement' 类型的节点,因为这些节点不满足 MATCH 子句。

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

任何帮助将不胜感激。

标签: node.jsneo4jcypher

解决方案


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

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

推荐阅读