2

我正在 Neo4j 网站上试用 Cypher 示例,其中一个查询让我有点困惑。

共有三个电影节点,分别title是“黑客帝国”、“重载黑客帝国”和“黑客帝国革命”。Matrix 节点具有id“603”。

还有三个演员节点,分别name是“基努·里维斯”、“劳伦斯·菲什伯恩”和“嘉莉-安妮·莫斯”。

所有演员和所有电影之间都有ACTS_IN关系。

这是一个查询,应该返回黑客帝国中演员出演的所有其他电影:

START matrix=node:node_auto_index(id="603") 
MATCH (matrix)<-[:ACTS_IN]-(actor)-[:ACTS_IN]->(movie) 
RETURN actor.name + ' acts in ' + movie.title;

这是它的(正确)结果:

Keanu Reeves acts in The Matrix Reloaded
Keanu Reeves acts in The Matrix Revolutions
Laurence Fishburne acts in The Matrix Reloaded
Laurence Fishburne acts in The Matrix Revolutions
Carrie-Anne Moss acts in The Matrix Reloaded
Carrie-Anne Moss acts in The Matrix Revolutions

为什么矩阵节点本身不包含在结果中?

4

1 回答 1

3

MATCH子句指定路径。一条路径可能有循环,但永远不会包含两次相同的关系。在

MATCH (matrix)<-[:ACTS_IN]-(actor)-[:ACTS_IN]->(movie) 

这两个 ACTS_IN 关系总是不同的。因此矩阵总是不等于电影,因为没有一个演员与同一部电影有两个 ACTS_IN 关系。

如果您将来自一个演员的多个关系添加到同一部电影中,您将获得具有 movie="The Matrix" 的匹配项。一个原因可能是一个演员扮演多个角色。

关于以下第一条评论的更新:

在这种情况下,自然语言中的查询将是:矩阵的所有演员都出演了哪些电影?

START matrix=node:node_auto_index(id="603") 
MATCH matrix<-[:ACTED_IN]-actor
WITH actor
MATCH actor-[:ACTED_IN]->movie
RETURN distinct movie.title;

WITH查询由与语句链接的两个部分组成:

  1. 找到矩阵的参与者
  2. 找到这些演员的所有电影
于 2013-08-26T08:38:45.380 回答