You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Neo4j GDS插件调用algo.pageRank遇ProcedureNotFound错误求助

解决Neo4j GDS库中algo.pageRank找不到的问题

嘿,这个问题我太熟悉了!你碰到的Neo.ClientError.Procedure.ProcedureNotFound错误,本质是新旧版算法库的命名规则不兼容——你装的是新版的Graph Data Science(GDS)库,但用了旧版算法库的过程名。

核心原因

旧版的algo.pageRank属于已经停止维护的「Neo4j Graph Algorithms」库,而你现在用的是官方推荐的「Graph Data Science Library」(GDS),它的所有过程前缀统一改成了gds,不再使用algo。

一步步解决

1. 先确认GDS插件是否正常加载

先跑这条命令验证插件状态:

CALL gds.list()

如果能返回一堆GDS相关的过程列表,说明插件已经正确加载;如果还是报错,那得先排查插件安装:

  • 确保下载的GDS版本和你的Neo4j版本完全兼容(比如Neo4j 5.x对应GDS 2.x及以上,Neo4j 4.x对应GDS 1.x)
  • 把GDS的jar文件放到Neo4j安装目录的plugins文件夹里
  • 重启Neo4j服务,让插件生效

2. 替换成正确的GDS过程名

根据你的需求(要把PageRank结果写入节点的pagerank属性),应该用gds.pageRank.write过程(gds.pageRank默认是流式返回结果,不会写入属性)。结合你的参数,正确的命令应该是这样:

CALL gds.pageRank.write(
  'Person',
  'HAS_EMAILED',
  {
    concurrency: 8,
    direction: 'OUTGOING',
    weightProperty: null,
    defaultValue: 1,
    dampingFactor: 0.85,
    iterations: 25,
    writeProperty: 'pagerank'
  }
)
YIELD nodePropertiesWritten, ranIterations

3. 关于limit:100的适配

注意:新版GDS里没有直接在PageRank过程中设置limit的参数,如果你的需求是只处理前100个Person节点,需要先创建一个带过滤的投影图,再运行算法:

# 先创建只包含前100个Person节点的投影图
CALL gds.graph.project(
  'personEmailGraph',
  { Person: { label: 'Person', limit: 100 } },
  'HAS_EMAILED'
)

# 对投影图运行PageRank并写入结果
CALL gds.pageRank.write('personEmailGraph', {
  concurrency: 8,
  direction: 'OUTGOING',
  weightProperty: null,
  defaultValue: 1,
  dampingFactor: 0.85,
  iterations: 25,
  writeProperty: 'pagerank'
})
YIELD nodePropertiesWritten, ranIterations

4. 快速查参数的小技巧

如果不确定某个过程的参数是否正确,可以直接调用帮助命令:

CALL gds.pageRank.write.help()

它会返回该过程的所有可用参数、类型和说明。

内容的提问来源于stack exchange,提问作者ashur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:23:47