Neo4J,匹配节点“OR”

时间:2017-03-21 15:53:23

标签: neo4j cypher

直升机,

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

match (:typeX|typeY)-[]-(z) return z

但这不起作用:(

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

match (:typeX)-[]-(z), (:typeY)-[]-(z) return z

有人能帮助我吗? 提前谢谢你:)

4 个答案:

答案 0 :(得分:4)

一种方法是

printf '%s\n' "$@" >> mytempfile.txt

但是,如果经常查询“typeX或typeY”并在您的域中共享一些共同目的,您可以添加另一个常用标签,例如“commonXY”和使用该标签的查询。

答案 1 :(得分:1)

不幸的是,在不牺牲性能的情况下,没有一种好的有效方法可以做到这一点。所有其他当前答案都被强制扫描所有节点,然后对其标签进行过滤,这些标签不具有大量节点(PROFILE查询)。我所知道的所有有效手段都比较冗长。

您可以执行两个查询的UNION,以便从所有节点返回节点:typeX和:typeY节点。

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

答案 2 :(得分:0)

即使PROCEDURE PRINT_CLOB(par_clob IN CLOB) IS ln_offset NUMBER DEFAULT 1; BEGIN LOOP EXIT WHEN ln_offset > dbms_lob.getlength(par_clob); dbms_output.put_line(dbms_lob.substr(par_clob, 255, ln_offset)); ln_offset := ln_offset + 255; END LOOP; END PRINT_CLOB; 有多个标签,此查询也会有效:

n

答案 3 :(得分:0)

有一个n谓词n:Label

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