neo4j 如何在Cypher中并行执行多个OPTIONAL MATCH?

fcy6dtqo  于 2023-08-04  发布在  其他
关注(0)|答案(2)|浏览(105)

我目前正在做一些类似的事情:

MATCH (s:Something)
OPTIONAL MATCH (t:Tag)<-[:HAS_TAG]-(s)
OPTIONAL MATCH (i:Item)<-[:HAS_ITEM]-(s)
OPTIONAL MATCH (w:Whatever)<-[:HAS_WHATEVER]-(s)

字符串
当我做一个配置文件,我看到3个可选扩展为每个可选匹配顺序,想知道如果我可以加快它可能做并行?既然彼此独立?

ujv3wf0j

ujv3wf0j1#

在这种情况下我经常这样做

MATCH (s:Something)
WITH s,
     [(s)-[:HAS_TAG]->(t:Tag) | t] AS ts,
     [(s)-[:HAS_ITEM]->(i:Item) | i] AS is,
     [(s)-[:HAS_TAG]->(w:Whatever) | w] AS ws

字符串
返回数组,而不是null,以防OPTIONAL MATCH不返回任何内容。而且通常也更快。

qkf9rpyu

qkf9rpyu2#

您可以使用单个OPTIONAL MATCH并使用聚合为每种关系类型生成节点列表:

MATCH (s:Something)
OPTIONAL MATCH (n)<-[r:HAS_TAG|HAS_ITEM|HAS_WHATEVER]-(s)
RETURN s, TYPE(r) AS t, COLLECT(n) AS nodes

字符串

相关问题