簡體   English   中英

遍歷節點之間的最佳路徑

[英]Traversing the optimum path between nodes

在一個圖中,從點(:A)到(:B)到節點(:C)有多條路徑,我想通過類型(的節點)從(:A)到(:B)提取路徑c:C),其中c.Value為最大值。 例如,僅將所有電影與其最老的普通演員聯系起來。

match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie) 
return m1.Name, m2.Name, a.Name, max(a.Age) 

上面的查詢返回最老的演員的正確年齡,但並不總是正確的名字。

相反,我注意到以下查詢返回正確的年齡和姓名。

match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie) 
with m1, m2, a order by a.age desc
return m1.name, m2.name, a.name, max(a.age), head(collect(a.name))

這永遠是真的嗎? 大概吧。 我有一個更好的方法來完成這項工作,而無需進行分類,這可能會花費很多?

您需要為此使用ORDER BY ... LIMIT 1

match p=(m1:Movie) <-[:ACTED_IN]- (a:Actor) -[:ACTED_IN]-> (m2:Movie) 
return m1.Name, m2.Name, a.Name, a.Age order by a.Age desc limit 1

請注意,您基本上想做一條加權最短路徑。 Neo4j可以使用Java代碼和GraphAlgoFactory來更有效地執行此GraphAlgoFactory ,請參閱參考手冊中的這一章。

對於那些願意做類似事情的人,請考慮閱讀@_nicolemargaret的 這篇文章該文章描述了如何提取與電影對(如head(collect())一樣)中成對的電影中n個最老的演員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM