Neo4J,将节点与“匹配”;或;

Neo4J,将节点与“匹配”;或;,neo4j,cypher,Neo4j,Cypher,你好 我想匹配一个节点可以是typeX或typeY的图形 我的第一个想法是: match (:typeX|typeY)-[]-(z) return z 但这不起作用:( 有没有办法不输入两次查询? 像这样: match (:typeX)-[]-(z), (:typeY)-[]-(z) return z 有人能帮我吗? 提前谢谢:)一种方法是 MATCH (n) WHERE labels(n) IN ['typeX','typeY'] WITH n MATCH (n)-[]-(z) RETU

你好

我想匹配一个节点可以是typeX或typeY的图形 我的第一个想法是:

match (:typeX|typeY)-[]-(z) return z
但这不起作用:(

有没有办法不输入两次查询? 像这样:

match (:typeX)-[]-(z), (:typeY)-[]-(z) return z
有人能帮我吗? 提前谢谢:)

一种方法是

MATCH (n) WHERE labels(n) IN ['typeX','typeY'] 
WITH n
MATCH (n)-[]-(z)
RETURN z

但是,如果经常查询“typeX或typeY”,并且在您的域中有一些共同的用途,您可以向它们添加另一个共同的标签,如“commonXY”,并使用该标签进行查询。

即使
n
有多个标签,此查询也会起作用:

MATCH (n)
WHERE ANY(lab IN labels(n) WHERE lab IN ['typeX', 'typeY'])
MATCH (n)--(z)
RETURN z

有一个n谓词
n:Label

MATCH (n)--(z)
WHERE n:typeX OR n:typeY
RETURN z

不幸的是,在不牺牲性能的情况下,没有一种有效的方法可以做到这一点。所有其他当前答案都必须扫描所有节点,然后在它们的标签上进行过滤,这对于大量节点来说是不合适的(分析查询)。我所知道的所有有效手段都比较冗长

您可以执行两个查询的并集,从所有:typeX和:typeY节点返回一个跃点

 match (:typeX)--(z)
 return z
 union
 match (:typeY)--(z)
 return z