目前,我正在一组节点上运行个性化PageRank。我要获取顶部的n
节点和RETURN
这些节点之间的所有关系 ,以得出每个节点的PageRank得分以及每个节点的一组属性。< / p>
目前,我正在设法RETURN
关系的开始和结束节点,但是我无法弄清楚如何也RETURN
得分和任何其他节点属性。
我的查询如下:
MATCH (p) WHERE p.paper_id = $paper_id
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 collect(n) as nodes
UNWIND nodes as n
MATCH (n)-[r:Cites]->(p) WHERE p in nodes
RETURN startNode(r).paper_id as start, collect(endNode(r).paper_id) as end
在第二个代码块I collect
中,匹配的节点n
是为了随后查找该集合中节点之间的所有关系。但是,在score
行中包含WITH collect(n) as nodes
会导致score
用作索引器,当我想以某种方式单独传递它时(允许吗?)。
输出格式并不重要,因为我可以在服务器端正确格式化它。
答案 0 :(得分:1)
APOC在这里可以提供帮助,您可以使用apoc.algo.cover()
获取一组节点之间的所有关系。
关于获得分数,最好从收集的节点中提取一个map projection,其中包括分数:
MATCH (p) WHERE p.paper_id = $paper_id
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 collect(nodeId) as ids, collect(n {.*, score}) as nodes
CALL apoc.algo.cover(ids) YIELD rel
RETURN nodes, collect(rel) as rels