2017-07-28 77 views
2

當在一組只有2個節點,它是相對容易的一個節點匹配有直接鏈接到所有節點在一組

MATCH (a:Article {id : "PMID:16009338"}),(c:Article {id: "PMID:21743479"}) 
WITH a, c 
MATCH (a)-[r]-(d)-[r1]-(c) 
RETURN d 

但隨着3個節點類似的嘗試沒有工作

MATCH (a:Article {id : "PMID:16009338"}),(c:Article {id: "PMID:21743479"}), (p:Article {id: "PMID:21741956"}) 
WITH a, c, p 
MATCH (a)-[r]-(d)-[r1]-(c)-[r2]-(d)-[r3]-(p) 
RETURN d 

它尋找c和d之間的不同關係。 r1和r2。如果我將r2更改爲r1,則表示:不能對多個模式使用相同的關係變量'r1'。

即使如果我做到這一點,它將不可能的4 +節點組。

==== 試圖用不同類型的3個節點,其執行速度不夠快

MATCH (a:Article {id : "AID:16009338"}),(v:Video {id: "VID:21743479"}), (s:Song {id: "SID:21741956"}) 
WITH a, v, s 
MATCH (a)-[]-(d) 
WITH d, v, s 
MATCH (v)-[]-(d) 
WITH d, s 
MATCH (s)-[]-(d) 
RETURN d 

回答

2

你可以看看針對的文章列表的共同節點,然後確保事後匹配的數量是與您匹配的數字相同。

WITH ['PMID:16009338','PMID:21743479','PMID:21741956'] as articles 
MATCH (d)--(a:Article) 
WHERE a.id in articles 
WITH articles, d, COLLECT(a) AS matched 
WHERE size(articles) = size(matched) 
RETURN d 
+0

這實際上是在工作,但我們如果集合中的任何節點具有不同的類型,則不改變文章,但視頻或歌曲。 – user732456

+3

從查詢的角度來看,最方便的方法是將另一個更通用的標籤添加到像Content這樣的節點上,並創建一個索引在那。 –

0

那麼你有X個節點都需要連接到其他節點D?

MATCH (a:Article {id : "AID:16009338"})--(d),(v:Video {id: "VID:21743479"})--(d), (s:Song {id: "SID:21741956"})--(d) 
RETURN d 

如果你知道關係的發展方向,補充說,如果你知道的關係的名稱,添加以及:

MATCH (a:Article {id : "AID:16009338"})-[:ART_TO_D]->(d),(v:Video {id: "VID:21743479"})-[:VID_TO_D]->(d), (s:Song {id: "SID:21741956"})-[:SONG_TO_D]->(d) 
RETURN d