2013-04-11 95 views
2

我的問題與此主題非常接近:Cypher query: Finding all paths between two nodes filtered by relationship properties但我想要做的是找到沿路徑具有遞增的關係屬性值的路徑。因此,在這種previos主題例如溶液路徑(從A到d)將是:Cypher查詢:通過關係屬性查找路徑

A-> dA-> B-> d

我用溶液從一主題

START a=node(1), d=node(4) 
MATCH p=a-[r:ACTIVATES*..]->d 
WITH head(relationships(p)) as r1,p 
WHERE all(r2 in relationships(p) 
     where r2.temperature > r1.temperature) 
return p; 

它適用於這個例子。問題是當有多於2個關係的路徑時,例如:

activates:50  activates:70  activates:60 
(A)-------------->(B)-------------->(C)-------------->(D) 

此路徑不幸匹配。

有沒有辦法如何寫這個查詢在密碼或我將不得不使用gremlin?

感謝您的任何建議。

更新:我需要的是一些建築像(僞編程語言):

WITH head(relationships(p)) as r1,p 
FOREACH(r2 in tail(relationships(p)): 
    r1.temperature < r2.temperature, r1 = r2) 

但暗號,如果它是更多鈔票。

回答

2

這一個在我的示例工作

START a=node(1), d=node(4) 
MATCH p=a-[r:ACTIVATES*..]-d 
WITH head(relationships(p))as r1,last(relationships(p))as r2,p 
WHERE all(r3 in relationships(p) 
     where r2.temperature > r1.temperature AND NOT r3.temperature < r1.temperature) 
return p; 

更新:有沒有辦法做到這一點與節點屬性?

+1

嗨。謝謝你的答案。但是這對我不起作用。這個實際匹配**(A) - 50 - >(B) - 70 - >(C) - 60 - >(D)**但我只需要匹配**(A) - 50→(B)→60→(C)→70→(D)** – cernej 2013-04-11 20:36:07

+0

理論上可以添加具有這種屬性的特殊節點。但在我的情況下,它會導致極大和複雜的圖(現在我的圖有100k +的節點,我認爲這種變化會導致100百萬以上的節點) – cernej 2013-04-12 09:26:37

+0

如果節點屬性可用於增量屬性路徑查找te,您可以添加到你的現有節點的關係屬性值就像這個'foreach(r in relationship(p): FOREACH(x in nodes(p):SET x.value = r.value))''。 – SotirisTsartsaris 2013-04-13 10:32:01

相關問題