使用Neo4j GDS原生投影创建图时报错该如何解决?
问题解决方案
报错根因
- 你将图创建、节点匹配、最短路径估算三类语句放在同一个Cypher查询中执行,
gds.graph.create存储过程在嵌套查询场景下没有显式通过YIELD声明返回值,触发了Cypher的语法限制。 - 额外存在关系类型不匹配问题:你创建的关系类型为小写的
Road,但创建图时传入的是大写的ROAD,该问题会导致后续算法执行时无有效关系加载,需要同步修正。
分步操作
1. 执行节点与关系创建语句
删除原语句末尾多余的WITH a, b,c,d,e,f,单独执行:
CREATE (a: Location {name: "A" }), (b: Location {name: "B" }), (c: Location {name: "C" }), (d: Location {name: "D" }), (e: Location {name: "E" }), (f:Location{name: "F" }), (a)-[:Road {cost:50}]->(b), (a)-[:Road {cost:50}]->(c), (a)-[:Road {cost:100}]->(d), (b)-[:Road {cost:40}]->(d), (c)-[:Road {cost:40}]->(d), (c)-[:Road {cost:80}]->(e), (d)-[:Road {cost:30}]->(e), (d)-[:Road {cost:80}]->(f), (e)-[:Road {cost:40}]->(f)
2. 执行图创建语句
修正关系类型大小写,同时添加YIELD声明返回值,单独执行:
CALL gds.graph.create( 'myGraph', 'Location', 'Road', { relationshipProperties: 'cost' } ) YIELD graphName, nodeCount, relationshipCount RETURN graphName, nodeCount, relationshipCount
执行后验证返回的nodeCount为6、relationshipCount为10,说明图创建正常。
3. 执行最短路径估算语句
单独执行以下语句即可得到预期结果:
MATCH (start:Location{name:"A"}), (end:Location{name:"F"}) CALL gds.shortestPath.dijkstra.write.estimate('myGraph', { startNode: start, endNode: end, relationshipWeightProperty: 'cost', writeRelationshipType: 'PATH' }) YIELD nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory RETURN nodeCount, relationshipCount, bytesMin, bytesMax, requiredMemory
补充说明
如果需要将多个语句合并为同一个查询执行,每个存储过程调用都必须显式声明YIELD的返回字段,无需要用到的返回值可以用YIELD * 兼容语法要求。
内容的提问来源于stack exchange,提问作者Madhumita Tripathy
相关产品推荐
相关产品推荐

