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

inm*_*awn 3 neo4j cypher

在页面 Neo4j Cypher 3.3.1 MATCH

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

这个例子:

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

返回 3 行,其中重复出现“美国总统”。

如果我将 3 更改为 2,则仅返回一行“华尔街”。这是为什么?minHops该部分中的和是什么意思maxHops

Inv*_*con 6

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

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

MATCH (me:Person{id:123})-[:FRIEND]-(friend)
Run Code Online (Sandbox Code Playgroud)

这代表朋友的朋友:

MATCH (me:Person{id:123})-[:FRIEND]-()-[:FRIEND]-(friendOfFriend)
Run Code Online (Sandbox Code Playgroud)

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

MATCH (me:Person{id:123})-[:FRIEND*2]-(friendOfFriend)
Run Code Online (Sandbox Code Playgroud)

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

MATCH (me:Person{id:123})-[:FRIEND*1..3]-(friend)
Run Code Online (Sandbox Code Playgroud)

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

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

MATCH (me:Person{id:123})-[:FRIEND*0..3]-(friend)
Run Code Online (Sandbox Code Playgroud)

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

MATCH path = (charlie:Person { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie)
RETURN path
Run Code Online (Sandbox Code Playgroud)

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