我正在Neo4j 2.0.4中編寫一個Cypher查詢,它試圖獲取選定節點的入站和出站關係的總數。當我只能用這個查詢一個節點 - 在 - 一時間,像這樣我可以很容易地做到這一點:使用與多個子句匹配導致奇數結果
MATCH (g1:someIndex{name:"name1"})
MATCH g1-[r1]-()
RETURN count(r1);
//Returns 305
MATCH (g2:someIndex{name:"name2"})
MATCH g2-[r2]-()
RETURN count(r2);
//Returns 2334
但是當我嘗試運行與2個節點查詢到一起(即獲得總數g1和g2的關係),我似乎得到了一個奇怪的結果。
MATCH (g1:someIndex{name:"name1"}), (g2:someIndex{name:"name2"})
MATCH g1-[r1]-(), g2-[r2]-()
RETURN count(r1)+count(r2);
//Returns 1423740
由於某些原因,這個數量遠遠大於305 + 2334的總數。
好像其他Neo4j的用戶已經使用多個MATCH
條款時遇到奇怪的問題,所以我通讀邁克爾飢餓的在https://groups.google.com/d/msg/neo4j/7ePLU8y93h8/8jpuopsFEFsJ解釋,勸告Neo4j的用戶管使用WITH
一場比賽的結果,以避免「標識的唯一性」 。然而,當我運行下面的查詢,它只是超時:
MATCH (g1:gene{name:"SV422_HUMAN"}),(g2:gene{name:"BRCA1_HUMAN"})
MATCH g1-[r1]-()
WITH r1
MATCH g2-[r2]-()
RETURN count(r1)+count(r2);
我懷疑這查詢不回來,因爲有通過r1
返回了很多紀錄。在這種情況下,我將如何操作2個節點上的「關係獲取數量」查詢?我只是使用了一些不正確的語法,或者是我的「2節點一次」查詢的邏輯有一些基本問題?
謝謝妮可!我不知道我目前的查詢是使用交叉產品;這使得現在更有意義。 – 2015-04-03 16:42:44