我有一個查詢會聚在一個節點簡化暗號查詢
MATCH (x:NodeA)-[]-(y:NodeB)-[]-(z:NodeC)
RETURN DISTINCT z.property.
有節點X和節點Z的許多實例,但只有少數節點Y的,這意味着許多的路徑穿過相同在y節點。
有沒有一種方法來簡化查詢,並因此減少由neo檢查的路徑數,因爲我不關心哪個x節點是最終z節點的來源?
該查詢目前有約280萬條路徑,但在y處只有約50個節點。
我有一個查詢會聚在一個節點簡化暗號查詢
MATCH (x:NodeA)-[]-(y:NodeB)-[]-(z:NodeC)
RETURN DISTINCT z.property.
有節點X和節點Z的許多實例,但只有少數節點Y的,這意味着許多的路徑穿過相同在y節點。
有沒有一種方法來簡化查詢,並因此減少由neo檢查的路徑數,因爲我不關心哪個x節點是最終z節點的來源?
該查詢目前有約280萬條路徑,但在y處只有約50個節點。
既然你不真正關心NodeA
,只要找到NodeB
- NodeC
雙其中NodeB
連接到任何NodeA
。否則,你的結果是由NodeA
S中號(前DISTINCT
過濾出來)乘以:
MATCH (y:NodeB)-[]-(z:NodeC)
WHERE (:NodeA)-[]-(y)
RETURN DISTINCT z.property
或者到Tezra的Cypher,您可以使用查詢,如:
MATCH (z:NodeC)
WHERE (:NodeA)-[]-(:NodeB)-[]-(z)
RETURN z.property
主要優勢在這裏事實是你不需要使用DISTINCT
。但重要的是,您使用PROFILE來查看每個查詢的執行計劃並選擇最適合您的模式的計劃。
這將不會編譯,因爲您不能在WHERE子句中引入新變量:'未定義'變量'x'(第2行,第8列(偏移量:36))''。但是,使用WHERE(:NodeA) - [] - (y)'可以正常工作。我建議一個修改這個的編輯。 –