2014-01-22 55 views
0

我正在將一組ID傳遞給Neo4J以通過索引查找。然後我想找到它們之間的共同關係,其中發現節點集合中的1個節點指向另一個節點。我試圖找回路徑來做到這一點,但我也想選擇只是檢索關係計數(因此關係)。到目前爲止,我有這樣的事情:查找從Neo4J索引中查找的一組節點之間的關係

start n = node:idx("MyID:(1 2 3 10000 1500)") 
MATCH p=(n)<-[r:RELATED_TO]->(n) 
RETURN p 

然而,這始終沒有返回,儘管我相信有共同的關係在這裏。

我環顧四周,但我找不到任何人在Cypher中做這件事的例子。我將如何去實現這一目標?或者有更好的方法來做到這一點?

謝謝。

回答

4

但要創建兩個索引查找之間的笛卡爾乘積。

所以如果那些返回的不止是5個節點,它將會呈指數級增長。

您的查詢已經完成了25個路徑檢查(5x5)。

START n = node:idx("MyID:(1 2 3 10000 1500)") 
MATCH p=(n)-[r:RELATED_TO]-(m) 
WHERE m.MyId IN [1,2,3,10000,1500] 
RETURN p 

根據路徑的數量,這可能會更便宜。

+0

啊,這是有道理的。謝謝!它完全可行,但我會有一百個ID。在100個額外的索引查找中,有100個ID? –

+0

很棒 - 這種方式便宜得多。 –

+0

克雷格,是的,否則你做100x100 = 10k路徑檢查。所以你只能遵循100個起始節點的路徑,這可能會小於10K。 –

1

您必須使用索引查找兩次:

start n = node:idx("MyID:(1 2 3 10000 1500)"), 
     m = node:idx("MyID:(1 2 3 10000 1500)") 
MATCH p=(n)-[r:RELATED_TO]-(m) 
RETURN p 
相關問題