密码匹配一种模式或另一种模式



这可能很简单,但我找不到答案...我有一个匹配规则,基本上说:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->((N2:Type1) OR (N2:Type2))
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2)

显然,该代码不起作用,但它可以说明我的问题。因此,我想找到相同的模式,区别在于N2的类型,并且在两种情况下都MERGE部分中执行相同的操作。如何做到这一点?

下面

介绍如何修改查询以测试N2是否具有任一类型:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2)
WHERE N2:Type1 OR N2:Type2
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);

但是,在比赛后使用"where"过滤器会影响性能。如果我们使用匹配,我们可以在匹配期间直接转到关系类型存储,效率更高。使用 'where' 子句,我们需要在过滤之前提取所有 [:trgt] 关系,因此根据您的图形(->[:trgt] 之后是否有许多其他可能的节点类型),使用以下代码可能会更有效:

MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2:Type1)
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);
MATCH (N1:Type1)-[:src]->(P)-[:trgt]->(N2:Type2)
MERGE (N1)-[:src]->(B:Type3)-[:trgt]->(N2);

相关内容

最新更新