2017-09-20 32 views
2

我有一個查詢會聚在一個節點簡化暗號查詢

MATCH (x:NodeA)-[]-(y:NodeB)-[]-(z:NodeC) 
RETURN DISTINCT z.property. 

有節點X和節點Z的許多實例,但只有少數節點Y的,這意味着許多的路徑穿過相同在y節點。
有沒有一種方法來簡化查詢,並因此減少由neo檢查的路徑數,因爲我不關心哪個x節點是最終z節點的來源?
該查詢目前有約280萬條路徑,但在y處只有約50個節點。

回答

1

既然你不真正關心NodeA,只要找到NodeB - NodeC雙其中NodeB連接到任何NodeA。否則,你的結果是由NodeA S中號(前DISTINCT過濾出來)乘以:

MATCH (y:NodeB)-[]-(z:NodeC) 
WHERE (:NodeA)-[]-(y) 
RETURN DISTINCT z.property 
+0

這將不會編譯,因爲您不能在WHERE子句中引入新變量:'未定義'變量'x'(第2行,第8列(偏移量:36))''。但是,使用WHERE(:NodeA) - [] - (y)'可以正常工作。我建議一個修改這個的編輯。 –

1

或者到Tezra的Cypher,您可以使用查詢,如:

MATCH (z:NodeC) 
WHERE (:NodeA)-[]-(:NodeB)-[]-(z) 
RETURN z.property 

主要優勢在這裏事實是你不需要使用DISTINCT。但重要的是,您使用PROFILE來查看每個查詢的執行計劃並選擇最適合您的模式的計劃。