我是一个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)
呢?
1条答案
按热度按时间2skhul331#
MATCH (a:Actor)
子句正在查询整个数据库,而不是GDS投影('proj ')。只有名称以gds.
开头的过程才能访问GDS。此外,节点可以具有任意数量的标签。因此,
Person
节点也可以具有Actor
标签,或Director
,或全部3个。