Neo4j 过程被多次调用

Neo4j 过程被多次调用,neo4j,cypher,Neo4j,Cypher,Neo4j中有一个bug,接受节点列表的过程会被多次调用。例如,algo.personalizedPageRank.stream在一个有8个节点的图上被一个节点调用8次: MATCH p = (n) CALL algo.personalizedPageRank.stream(nodes(p), 'Page', 'LINKS', {iterations:20, dampingFactor:0.85}) YIELD node, score RETURN node,score order by sco

Neo4j中有一个bug,接受节点列表的过程会被多次调用。例如,algo.personalizedPageRank.stream在一个有8个节点的图上被一个节点调用8次:

MATCH p = (n)
CALL algo.personalizedPageRank.stream(nodes(p), 'Page', 'LINKS', {iterations:20, dampingFactor:0.85})
YIELD node, score
RETURN node,score order by score desc limit 20
有人知道如何解决这个问题吗?一种选择是按节点分组,并使用总和聚合来查找个性化的PageRank,但我不希望因为必须为输入列表中的每个项调用一次算法而受到性能影响

错误报告(供参考): 这不是一个bug

在Cypher中,操作生成记录/行,并对每个记录执行操作。这几乎适用于所有子句,包括过程调用。如果您分析查询,您可以看到这一点:您有8行匹配结果,因此该过程将被调用8次

如果只希望过程只执行一次,请收集所需的节点,以便只有一行具有节点列表,然后调用查询

MATCH (n)
WITH collect(n) as nodes
CALL algo.personalizedPageRank.stream(nodes, 'Page', 'LINKS', {iterations:20, dampingFactor:0.85})
YIELD node, score
RETURN node,score order by score desc limit 20
这不是一个bug

在Cypher中,操作生成记录/行,并对每个记录执行操作。这几乎适用于所有子句,包括过程调用。如果您分析查询,您可以看到这一点:您有8行匹配结果,因此该过程将被调用8次

如果只希望过程只执行一次,请收集所需的节点,以便只有一行具有节点列表,然后调用查询

MATCH (n)
WITH collect(n) as nodes
CALL algo.personalizedPageRank.stream(nodes, 'Page', 'LINKS', {iterations:20, dampingFactor:0.85})
YIELD node, score
RETURN node,score order by score desc limit 20