neo4j apoc 系列
Neo4j GDS-01-graph-data-science 图数据科学插件库概览
Neo4j GDS-02-graph-data-science 插件库安装实战笔记
Neo4j GDS-03-graph-data-science 简单聊一聊图数据科学插件库
Neo4j GDS-06-neo4j GDS 库中社区检测算法介绍
Neo4j GDS-07-neo4j GDS 库中社区检测算法实现
Neo4j GDS-08-neo4j GDS 库中路径搜索算法介绍
Neo4j GDS-09-neo4j GDS 库中路径搜索算法实现
Neo4j GDS-10-neo4j GDS 库中相似度算法介绍
Neo4j GDS-11-neo4j GDS 库中相似度算法实现
Neo4j GDS-12-neo4j GDS 库中节点插入(Node Embedding)算法介绍
Neo4j GDS-13-neo4j GDS 库中节点插入算法实现
Neo4j GDS-14-neo4j GDS 库中链接预测算法介绍
Neo4j GDS-15-neo4j GDS 库中链接预测算法实现
Neo4j GDS-16-neo4j GDS 库创建 graph 图投影
Neo4j GDS-17-neo4j GDS 库创建 graph 图投影更复杂的场景
路径搜索算法 neo4j gds 库的各种实现和入门例子
Neo4j GDS库路径搜索算法详解与实战指南
一、GDS库概述与安装配置
Neo4j Graph Data Science(GDS)库是Neo4j的扩展插件,提供超过70种图算法,包括路径搜索、社区检测、中心性分析等。
其核心功能是通过内存图投影技术高效处理大规模数据。安装方式如下:
- Neo4j Desktop:直接在插件市场添加GDS库。
- 手动安装:下载对应版本的JAR文件至
plugins
目录,并修改neo4j.conf
启用插件。 - 云服务:Neo4j AuraDS(企业版)或Data Science Sandbox(社区版)预装GDS。
验证安装:执行CALL gds.version()
查看版本,企业版需通过gds.license.state()
验证许可。
二、支持的路径搜索算法及示例代码
GDS库提供以下主要路径搜索算法:
1. Dijkstra最短路径算法
用途:计算两点间最短路径,支持加权关系(如距离、成本)。
示例:
MATCH (start:Person {name: 'Alice'}), (end:Person {name: 'Bob'}) CALL gds.shortestPath.dijkstra.stream('myGraph', { sourceNode: start, targetNode: end, relationshipWeightProperty: 'weight' }) YIELD index, sourceNode, targetNode, totalCost, path RETURN gds.util.asNode(sourceNode).name AS startNode, gds.util.asNode(targetNode).name AS endNode, totalCost, nodes(path) AS pathNodes
应用场景:物流路线优化、网络路由。
2. A*算法
特点:在Dijkstra基础上引入启发式函数(如欧氏距离),加速搜索。
示例:
CALL gds.shortestPath.astar.stream('roadGraph', { sourceNode: id(startNode), targetNode: id(endNode), latitudeProperty: 'lat', longitudeProperty: 'lon', relationshipWeightProperty: 'distance' }) YIELD path RETURN path
适用场景:地图导航、需方向引导的路径规划。
3. Yen’s K最短路径算法
用途:找出前K条最短路径,解决路径冗余或备用路线需求。
示例:
CALL gds.shortestPath.yens.stream('transportGraph', { sourceNode: source, targetNode: target, k: 3, relationshipWeightProperty: 'cost' }) YIELD index, path RETURN index, nodes(path) AS routes
应用案例:供应链多路径评估、应急路线规划。
4. K-Hop路径算法
功能:查找从起点出发的K跳内所有节点,分析局部网络结构。
示例:
MATCH (start:User {id: 'U123'}) CALL gds.alpha.kHop.stream('socialGraph', start, 2) YIELD nodeId RETURN gds.util.asNode(nodeId).id AS neighbor
适用场景:社交网络影响力分析、风险传播范围识别。
5. 最小有向Steiner树算法
用途:连接多个目标节点的最小权重树,解决NP难问题。
示例:
CALL gds.alpha.steinerTree.stream('supplyChain', { sourceNode: factory, targetNodes: [warehouse1, warehouse2], relationshipWeightProperty: 'shippingCost' }) YIELD nodeId, parentId RETURN nodeId, parentId
应用场景:电信网络布线、多仓库物流优化。
三、算法参数配置详解
GDS算法的通用配置项包括:
- 图投影参数:
nodeProjection
(节点标签)、relationshipProjection
(关系类型与方向)。 - 权重属性:
relationshipWeightProperty
定义边的权重字段。 - 路径限制:如Yen’s算法的
k
参数控制返回路径数量。 - 启发式函数:A*算法需指定
latitudeProperty
和longitudeProperty
。
高级配置示例:
CALL gds.graph.create(
'optimizedGraph',
['City', 'Hub'], // 节点标签
{
ROAD: {type: 'ROAD', orientation: 'NATURAL', properties: 'distance'},
RAIL: {type: 'RAIL', orientation: 'UNDIRECTED'}
},
{ relationshipProperties: 'distance' }
)
此配置创建包含公路和铁路的双模式图投影,支持复杂路径分析。
四、算法适用场景对比分析
算法 | 权重支持 | 适用场景 | 性能特点 |
---|---|---|---|
Dijkstra | 正权重 | 精确最短路径(单对节点) | 稳定,适合中小规模图 |
A* | 正权重 | 有方向引导的快速路径搜索 | 比Dijkstra快,依赖启发式 |
Yen’s | 正权重 | 多路径备选方案(如物流备用路线) | 计算成本随K值增加而上升 |
K-Hop | 无权重 | 局部网络结构分析(如社交圈层) | 高效,仅限无权重图 |
Steiner Tree | 正权重 | 多目标节点连接优化 | 启发式算法,适合大规模图 |
注:所有算法均需避免负权重环,否则可能导致计算错误。