繁体   English   中英

Cypher:返回集合中节点之间的所有关系

[英]Cypher: Returning all relationships between nodes in a collection

我非常简单地尝试让Cypher输出集合中节点之间或匹配节点之间的所有关系。

我已经阅读了关于SO的几个解决方案,但是没有一个对我有用。

MATCH (p:Paper {paper_id: '29912657'})
CALL algo.pageRank.stream(null, null, {direction: "BOTH", 
sourceNodes: [p]})
YIELD nodeId, score
WITH p, nodeId, score ORDER BY score DESC
LIMIT 25

MATCH (n)
WHERE id(n) = nodeId
WITH n, score, collect(n) AS c
MATCH (n)-[r:Cites]->(m)
WHERE m in c
RETURN r

在第一段代码中,我在具有特定“ paper_id”属性的节点上运行个性化页面排名。 然后,我按分数对结果进行排序,并获得前25个结果。

我尝试了第二个代码块的许多变体,但均未成功。 我正在尝试MATCH集合c节点之间存在的所有关系,并RETURN它们。 当我运行它时,我得到一个空的响应。 我怀疑MATCH (n)-[r:Cites]->(m)行有问题,因为如果我尝试RETURN其他变量,例如n ,我仍然会得到一个空响应。 删除该行并RETURN n会得到除查询节点p之外的前24个得分节点。

如果我尝试使用OPTIONAL MATCH而不是OPTIONAL MATCHMATCH得到25个null值的列表。

我正在使用Neo4j版本3.4.5。

任何帮助表示赞赏!

您有一个正确的想法,收集并匹配集合中的节点,但是您遇到了聚合问题。

进行聚合时,非聚合变量将成为分组关键字,即聚合的上下文。

看这行:

WITH n, score, collect(n) AS c

这要问的是,每n和一个score给我该n的集合。 您每n将有一行,并且每个集合将是该n单个集合。

为了拥有完整的节点集合,但每行只保留一个节点,您需要先收集节点然后再退回到行中(我们可以在此处省略分数,因为您不会在第二部分中使用它)查询。

... // since you already have the nodes you want no need to re-match to them
WITH collect(p) as nodes
UNWIND nodes as p  // let's just keep the variable consistent here
// we now have each `p` and the full collection of nodes
MATCH (p)-[r:Cites]->(m)
WHERE m in nodes
RETURN r

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM