return 密码部分匹配

return partial match in cyhper

您好,我正在使用此查询 return 三个起始节点的公共 child 节点。

MATCH (c1:node)-[*]->(x), (c2:node)-[*]->(x), (c3:node)-[*]->(x)
USING INDEX c1:node(name)
USING INDEX c2:node(name)
USING INDEX c3:node(name)
WHERE c1.name = "Tobin" AND c2.name ="John" AND c3.name ="Clarke"
RETURN DISTINCT x

目前它不会 return 任何东西,除非所有三个节点都有一个共同的 child 节点。我怎样才能 return 部分匹配,其中 Tobin 和 John 有共同点 child 而 Clarke 没有?

理想情况下,在这种情况下,我会单独拥有它 return Clarke 的第一个 child,即使它与其他人不匹配。但也许我对一个查询的要求太多了?

谢谢!

这有点难,因为您的 3 个节点中的任何一个子节点都符合该条件。所以你创建的是一个叉积。

在 Neo4j 2.2.0 中你可以试试这个:

MATCH (c1:node),(c2:node), (c3:node)
USING INDEX c1:node(name)
USING INDEX c2:node(name)
USING INDEX c3:node(name)
WHERE c1.name = "Tobin" AND c2.name ="John" AND c3.name ="Clarke"
MATCH (c1)-[*]->(x)
WHERE shortestPath((c2)-[*]->(x)) oR shortestPath((c3)-[*]->(x))
RETURN DISTINCT x