Neo4j匹配多个标签

7
有这样一种情况,我需要匹配节点的任何一个标签。
我们可以对关系类型进行这样的操作。
(n)-[:KNOWS|LOVES]->(m)

我们可以像这样匹配节点标签吗? 例如:
MATCH (c:computer)<-[:belongs_to]-(comp:HP|IBM)
return comp

目前我尝试过这个方法并且得到了结果,有没有更简单的方法?
MATCH (c:computer)<-[:belongs_to]-(comp)
WHERE 'HP' IN labels(comp) OR  'IBM' IN labels(comp)
return comp

就我个人而言,我认为你的第三个示例非常简单且是一个不错的方法。你可以尝试使用 OPTIONAL MATCH(http://docs.neo4j.org/chunked/stable/query-optional-match.html),但生成的查询可能不会比你现有的更简单。 - FrobberOfBits
3个回答

8

我认为

WHERE 'HP' IN labels(comp) OR  'IBM' IN labels(comp)

AND

WHERE comp:HP OR comp:IBM

第二种方法使用起来更加简单。


1
这种形式的最后一个查询至少更容易编写和理解:
MATCH (c:computer)<-[:belongs_to]-(comp)
WHERE comp:HP OR comp:IBM
return comp;

0

目前遇到了同样的问题。

由于我有相当多的标签需要匹配(揭示了我的架构中存在一些缺陷!),我发现以下方法可以简洁地解决这个问题:

MATCH (n:computer)
WHERE any(label in labels(n) WHERE label in ['HP', 'IBM'])
RETURN n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接