2017-03-17 111 views

回答

1

allShortestPaths功能枚舉兩個節點之間的所有最短路徑。因此,對於您的查詢,它需要所有可能的objectapiUser節點對,並枚舉每對之間的所有最短路徑。那麼我們如何阻止這種情況發生?

首先,你可能要簡化你這樣的原始查詢:

MATCH p=allShortestPaths((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

其次,如果你只需要一個路徑,爲什麼不使用shortestPath功能?

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
LIMIT 1 

這仍然將計算的最短路徑爲每個apiUser,所以你要根據路徑的長度責令結果:

MATCH p=shortestPath((object {id:'1489751911095'})-[*]-(apiUser:ApiUser)) 
RETURN p 
ORDER BY length(p) DESC 
LIMIT 1 

這是不是最有效的解決方案,因爲Neo4j仍將計算每個apiUser的最短路徑 - 解決方案是否適用於您的用例取決於數據庫中的apiUser的數量。

0

當從單個節點匹配,可變長度匹配LIMIT 1應該工作:

MATCH (object{id:'1489751911095'})-[*]-(p:ApiUser) 
RETURN p limit 1 

我們建議尋找增長性的節點時,在你的對手一個標籤,索引或對標籤+屬性的唯一約束,所以它是一個快速匹配。

如果您不確定附近是否有該類型的節點,則可能需要爲可變長度匹配添加上限。

相關問題