“gds.graph.project”在Neo4j中是如何工作的?

a7qyws3x  于 2023-05-28  发布在  其他
关注(0)|答案(1)|浏览(305)

我是一个neo4j初学者。
在neo4j在线课程-Neo4j Graph Data Science Fundamentals中练习时,我对以下**“课程示例”**感到困惑。

课程示例

首先,创建图形投影。

CALL gds.graph.project('proj',
    ['Person','Movie'],
    {
        ACTED_IN:{orientation:'UNDIRECTED'},
        DIRECTED:{orientation:'UNDIRECTED'}
    }
);

然后我们可以运行Dijkstra的最短路径。

MATCH (a:Actor)
WHERE a.name IN ['Kevin Bacon', 'Denzel Washington']
WITH collect(id(a)) AS nodeIds
CALL gds.shortestPath.dijkstra.stream('proj', {sourceNode:nodeIds[0], TargetNode:nodeIds[1]})
YIELD sourceNode, targetNode, path
RETURN gds.util.asNode(sourceNode).name AS sourceNodeName,
    gds.util.asNode(targetNode).name AS targetNodeName,
    nodes(path) as path;

提问

关于gds.graph.project,我的理解是它从原始图创建了一个子图(子集)
然而,在创建这个子图时,没有带有Actor标签的节点。那么,为什么在执行Dijkstra算法时可以执行MATCH (a:Actor)呢?

2skhul33

2skhul331#

MATCH (a:Actor)子句正在查询整个数据库,而不是GDS投影('proj ')。只有名称以gds.开头的过程才能访问GDS。
此外,节点可以具有任意数量的标签。因此,Person节点也可以具有Actor标签,或Director,或全部3个。

相关问题