Neo4j 的“可变长度关系”是啥意思?

Posted

技术标签:

【中文标题】Neo4j 的“可变长度关系”是啥意思?【英文标题】:What's the meaning of Neo4j's 'Variable length relationships'?Neo4j 的“可变长度关系”是什么意思? 【发布时间】:2018-02-24 03:32:41 【问题描述】:

在页面中 Neo4j Cypher 3.3.1 MATCH

“可变长度关系”部分让我感到困惑。

例子:

MATCH (martin name: 'Charlie Sheen' )-[:ACTED_IN*1..3]-(movie:Movie) RETURN movie.title

返回 3 行并重复“美国总统”。

如果我将 3 更改为 2,则只返回一行“华尔街”。这是为什么?以及minHopsmaxHops在板块中的含义是什么?

【问题讨论】:

【参考方案1】:

这与模式中允许遍历的关系数量有关。

例如,对于社交网络图,这表示匹配到您的所有朋友:

MATCH (me:Personid:123)-[:FRIEND]-(friend)

这代表朋友的朋友:

MATCH (me:Personid:123)-[:FRIEND]-()-[:FRIEND]-(friendOfFriend)

这是同样的事情,但具有可变长度的关系,表明您要遍历 :FRIEND 关系两次。

MATCH (me:Personid:123)-[:FRIEND*2]-(friendOfFriend)

我们可以设置最小和最大跳数:

MATCH (me:Personid:123)-[:FRIEND*1..3]-(friend)

这将返回通过遍历至少一个 :FRIEND 关系和最多 3 个 :FRIEND 关系可以到达的所有节点。

如果我们将 0 设置为下限,那么起始节点 me 也将包含在 friend 的结果中

MATCH (me:Personid:123)-[:FRIEND*0..3]-(friend)

至于文档中的示例,如果我们更改该查询以返回路径而不仅仅是结束节点:

MATCH path = (charlie:Person  name: 'Charlie Sheen' )-[:ACTED_IN*1..3]-(movie:Movie)
RETURN path

您会看到有一条长度为 1 的路径结束于华尔街的节点,并且有两条长度为 3 的不同路径结束于美国总统。

【讨论】:

【参考方案2】:

这是路径的数量,而不是节点的数量。

1..3 表示 1 或 2 或 3 步到另一个匹配的节点 (movie:Movie)。

【讨论】:

以上是关于Neo4j 的“可变长度关系”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

线框图(格子包)中的负长度向量是啥意思?

警告是啥意思:条件的长度> 1,并且只使用第一个元素

Surv 错误消息“开始和停止的长度不同”实际上是啥意思?

“无法强制到系列,长度必须为 1:给定 11”错误在 Python 中是啥意思?

neo4j是啥?怎么配置?能单独使用吗?

MySQL字段类型都是啥意思?