Neo4j Cypher:多个源节点返回重复项的个性化PageRank
我有一个特定的Cypher查询,它在一组源节点上运行个性化的PageRank。我想Neo4j Cypher:多个源节点返回重复项的个性化PageRank,neo4j,cypher,Neo4j,Cypher,我有一个特定的Cypher查询,它在一组源节点上运行个性化的PageRank。我想返回最上面的n评分节点,包括它们的PageRank分数、附加属性以及这些节点之间的所有关系 在SO的帮助下,我得出了这一点: MATCH (p) WHERE p.paper_id IN $paper_ids CALL algo.pageRank.stream(null, null, {direction: "BOTH", sourceNodes: [p]}) YIELD nodeId, score WITH p,
返回最上面的n
评分节点,包括它们的PageRank分数、附加属性以及这些节点之间的所有关系
在SO的帮助下,我得出了这一点:
MATCH (p) WHERE p.paper_id IN $paper_ids
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 ids, nodes, collect(rel) as rels
我遇到的唯一问题是,此查询返回重复的节点。例如,可以使用不同的PageRank分数多次返回节点。我怀疑这是因为有多个源节点,所以不同的分数对应于每个源节点的PageRank分数。为单个源节点运行PageRank时,不存在重复项
这是一个问题,因为我想返回n
唯一节点(在上面的代码块n
=25中)。在两个源节点的典型运行中,我得到了大约21-22个唯一节点
如何确保返回唯一节点?正如@Tezra所说,您需要确定如何为相同的p
解析多个分数
以下选项均涉及对本条款进行简单更改:
WITH p, nodeId, score
选项:
- 使用最大
分数
:
WITH p, nodeId, MAX(score) AS score
WITH p, nodeId, MIN(score) AS score
WITH p, nodeId, AVG(score) AS score
- 使用最低
分数
:
WITH p, nodeId, MAX(score) AS score
WITH p, nodeId, MIN(score) AS score
WITH p, nodeId, AVG(score) AS score
- 使用平均
分数:
WITH p, nodeId, MAX(score) AS score
WITH p, nodeId, MIN(score) AS score
WITH p, nodeId, AVG(score) AS score
那么您希望如何解析不同的页面排名?你能把MAX(score)
作为最后的pageRank吗?返回DISTINCT
将删除重复行,但如果重复行中存在不同的值,则需要添加逻辑来解决这些差异,以获得最终的DISTINCT行。