Neo4J密码查询结果背后的魔力

Neo4J密码查询结果背后的魔力,neo4j,cypher,Neo4j,Cypher,我在Neo4J Cypher 2.0中有以下查询: MATCH (u:User{uid:'1111111'}), (c1:Concept), (c2:Concept), c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2 WITH c1,c2,rel MATCH c1-[:AT]->ctx, c2-[:AT]-ctx WHERE ctx.uid = rel.context RETURN c1.uid AS source_id, c1

我在Neo4J Cypher 2.0中有以下查询:

MATCH (u:User{uid:'1111111'}), (c1:Concept), (c2:Concept),
c1-[:BY]->u, c2-[:BY]->u, c1-[rel:TO]->c2 
WITH c1,c2,rel 
MATCH c1-[:AT]->ctx, c2-[:AT]-ctx 
WHERE ctx.uid = rel.context 
RETURN c1.uid AS source_id, c1.name AS source_name, 
c2.uid AS target_id, c2.name AS target_name, 
rel.uid AS edge_id, 
rel.context AS context_id, ctx.name AS context_name;
它所做的是查找连接到
User
节点
u
Concept
标签(
c1
c2
)的所有节点,找到它们之间的(
c1
c2
)连接(
rel
),然后尝试查找不同的上下文(
ctx
)这些概念节点(
c1
c2
)出现在中,但只有那些
uid
与关系
rel
rel.context
)的
uid
属性的
context
)的
uid
匹配的节点才会出现,然后将它们返回到一个表中,其中有源
id
name
,目标
id
name
,连接
id
,以及该关系的
.context
id
属性和具有该
id
的上下文的名称

所以一切都很好,但问题是:为什么

我的意思是,Cypher如何将右侧的
ctx.uid
与右侧的
rel.context
如此巧妙地匹配,从而知道它应该准确地插入结果表的正确位置

谁能给我解释一下这背后的魔力吗

还是我完全错了,结果很糟糕


谢谢大家!

它创建一个模式图,表示您的组合匹配模式。然后,它使用索引查找绑定节点,并开始将模式图应用到这些节点,并为找到的每个匹配返回一个结果行

在应用模式图时,它会使用WHERE条件尽早过滤掉您不想要的路径


如果找不到绑定节点,则必须遍历标签的所有节点(如:概念)或图形的所有节点(如果未指定任何标签或查找条件)。

您可以将
PROFILE
添加到cypher查询的开头,以查看有关其操作的更多详细信息。