您好我正在使用此查询返回三个起始节点的公共子节点。
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
目前除非所有三个节点都有一个公共子节点,否则它不会返回任何内容。我怎么能让它返回部分匹配,说托宾和约翰有一个共同的孩子克拉克没有?
理想情况下,在这种情况下,我会单独让它返回Clarke的第一个孩子,即使它与其他人不匹配......但也许我从一个查询中要求太多了?
谢谢!
答案 0 :(得分:0)
它有点难,因为任何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