gpt4 book ai didi

Neo4j:Cypher 示例查询的结果让我感到困惑

转载 作者:行者123 更新时间:2023-12-04 04:44:15 24 4
gpt4 key购买 nike

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

三个电影节点分别具有 title s “黑客帝国”、“黑客帝国重装上阵”和“黑客帝国革命”。矩阵节点有 id “603”。

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

ACTS_IN所有 Actor 和所有电影之间的关系。

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

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

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

最佳答案

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

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

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

如果您将多个关系从一个 Actor 添加到同一部电影,您将返回具有 movie="The Matrix"的匹配项。一个原因可能是一个 Actor 扮演多个角色。

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

在这种情况下,自然语言中的查询将是:矩阵中的所有 Actor 都演过哪些电影?
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 链接的两部分组成声明:
  • 找到矩阵的 Actor
  • 查找这些 Actor 的所有电影
  • 关于Neo4j:Cypher 示例查询的结果让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18438966/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com