2013-08-02 42 views
0

我有,看起來像this最低兩個屬性

一個圖形的 - [:LIKES {頻率:6}] - >冰 b - [:LIKES {頻率:3}] - >比薩餅等

我正在運行此查詢,找出兩個人喜歡的常見食物。如果我總計頻率屬性來爲食物創建一個類似索引,它會正常工作。

START b=node:node_auto_index(name='B') 
MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
WITH b, someone_else_too, r1.frequency + r2.frequency AS likeIndex 
RETURN likeIndex ,someone_else_too 
ORDER BY likeIndex DESC 

但是,我想要做的是找到最低的兩個頻率值(不是最低總數)。所以像這樣的事情(r1.frequency,r2.frequency)。我們的目標是消除偏差,如果對中的一個對特定食物具有非常高的親和力,將會增加類似的排名。

START b=node:node_auto_index(name='B') 
    MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
    WITH b, someone_else_too, min(r1.frequency,r2.frequency) AS likeIndex 
    RETURN likeIndex ,someone_else_too 
    ORDER BY likeIndex DESC 

但是,Cypher不會接受該語法。任何建議或解決?見Neo4j的控制檯here

回答

1

在2.0你可以使用case/whenhttp://console.neo4j.org/r/y8sqi1

START b=node:node_auto_index(name='B') 
MATCH p = b-[r1:LIKES]->stuff, someone_else_too -[r2:LIKES]->stuff 
WITH b, someone_else_too, 
    CASE WHEN r1.frequency < r2.frequency 
    THEN r1.frequency 
    ELSE r2.frequency 
    END AS likeIndex 
RETURN likeIndex ,someone_else_too 
ORDER BY likeIndex DESC 
+0

Hi Wes。很抱歉,我正在使用1.9。任何其他想法或解決方法? – Anshul

+0

Btw結果你的控制檯正是我想要的。我的其他擔心是,即使我以某種方式將我的數據庫升級到了2.0,這對於700萬個節點來說是不可能的,但我不太確定Neo4jClient是否支持case/when。 – Anshul

+0

我不認爲沒有非聚合最小函數或某種方式來執行條件的方法是不錯的。您應該可以用700萬個節點升級商店。你有沒有麻煩? –

0

有一個數學的方式來獲得最小值:

(r1.frequency + r2.frequency - ABS(r1.frequency - r2.frequency))/2

但it's過痘痘的重:(