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

时间:2019-01-10 04:33:00

标签: node.js neo4j cypher

在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

但是,这不会返回所需的结果。如果自身与页面排名小于1的“场景”节点相关,则排除其“页面排名”大于1的“功能”和“需求”类型的节点,因为这些节点不满足MATCH子句。

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

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您不能通过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的结果吗?