2014-08-27 215 views
4

存在這種情況,我需要匹配節點的任何一個標籤。Neo4j匹配多個標籤

我們可以做到這一點的關係類型,如

(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 
+0

FWIW我覺得你的第三個例子是相當簡單,並且是一個很好的方法。您可以使用OPTIONAL MATCH(http://docs.neo4j.org/chunked/stable/query-optional-match.html)進行調查,但生成的查詢不會比您擁有的簡單。 – FrobberOfBits 2014-08-27 15:26:50

回答

6

我想

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

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