【问题标题】:Cypher path querying (using Neo4j)密码路径查询(使用 Neo4j)
【发布时间】:2015-04-13 10:37:34
【问题描述】:

我有一个图表数据库,所以里面有一些像这样的模式:

(n1)-[:a]->(n2),
(n1)-[:b]->(n2),
(n1)-[:c]->(n2),
(n1)-[:e]->(n2),
(n1)-[:d]->(n3),
(n2)-[:b]->(n4)

我希望所有图表都具有这种模式

MATCH p={
 (n3)<-[:d]-(n1)-[:a]->(n2)-[:b]->(n4),
 (n1)-[:b]->(n2)<-[:c]-(n1),
 (n1)-[:e]->(n2)
}
RETURN p

有可能吗?我已经搜索了一点,但我还没有找到如何去做。 我知道我们可以使用“|”对于这样的类型

 ()-[:a|b]->()

但是没有“&”,并且路径分配只适用于没有“,”的模式。

谢谢

编辑: 如果它可以帮助,这是我正在寻找的另一个例子: 在包含电影、人物和关系的数据库中,例如 ACTED_IN、KNOWS、FRIEND 和 HATE 我想要包含一个演员“Actor1”(他在电影“M”中 ACTED_IN)的所有图表,他知道“Person1”、朋友“Person2”和讨厌“Person3”,他们 ACTED_IN 同一部电影“M”。

像“Michael Hunger”答案中的 UNION 不起作用,因为我们有多个子图而不是图。此外,某些子图可能不是更大模式的正确答案。

【问题讨论】:

    标签: neo4j pattern-matching cypher


    【解决方案1】:

    您的查询将非常效率低下,因为您不会将搜索限制在一组既没有标签也没有标签+属性组合的起始节点!!!!

    您可以为此使用 UNION:

    MATCH p=(n3)<-[:d]-(n1)-[:a]->(n2)-[:b]->(n4) RETURN p
    UNION
    MATCH p=(n1)-[:b]->(n2)<-[:c]-(n1) RETURN p
    UNION
    MATCH p=(n1)-[:e]->(n2) RETURN p
    

    【讨论】:

    • 感谢您的回复,但此查询将返回可能没有第三个匹配项的图形,因为这是一个 UNION。没有?
    • 我已经测试了这个答案,但它不起作用:/ 实际上,它允许汇总答案但不允许汇总路径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多