“gds.graph.project”在 Neo4j 中实际如何工作?

问题描述 投票:0回答:1

在练习 Neo4j 在线课程 - Neo4j 图数据科学基础知识时,我对以下课程示例感到困惑:

首先,创建图形投影。

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)
呢?

neo4j cypher
1个回答
3
投票

MATCH (a:Actor)
子句正在查询完整数据库,而不是GDS投影('proj')。只有名称以
gds.
开头的程序才能访问 GDS。

此外,一个节点可以有任意数量的标签。因此,

Person
节点也可以具有
Actor
标签,或
Director
,或全部 3。

© www.soinside.com 2019 - 2024. All rights reserved.