2013-12-09 86 views
6

我有一個成員和他們已經看過的項目圖。使用cypher/neo4j比較數組值

這些數據將用於根據類似成員查看的物品推薦物品。我想根據項目顏色的相似程度對項目進行排序。顏色以數組形式存儲([「紅色」,「藍色」,「綠色」))。有沒有什麼方法可以比較數組以查看它們有多少共同點?

回答

8

給定兩個節點,n和m,看起來是這樣的:

CREATE ({id: 1, color: ["red", "blue", "green", "yellow"]}) 
CREATE ({id: 2, color: ["red", "blue", "green", "white"]}) 

你可以做這樣的事情:

MATCH n, m 
WHERE n.id = 1 AND m.id = 2 
RETURN length(FILTER(x in n.color WHERE x in m.color)) 

FILTER功能遍歷的n.color陣列,結合當前值爲x(由我任意選擇,可能會不同)。爲每個x值檢查謂詞(x in m.color),如果它的計算結果爲true,則將該元素推送到FILTER返回的新數組中。您可以將它保留在此處以查看兩個陣列(在本例中爲紅色,藍色和綠色)的交點,或將其包裝在length函數中以查看兩個節點之間共享的顏色數量(在此情況下爲3個) 。

退房全濾波器文檔瀏覽:http://docs.neo4j.org/chunked/milestone/query-functions-collection.html#functions-filter

+1

+1與解釋很好的答案,但(因爲答案假設2.0版,不妨)使用匹配屬性:'MATCH(N {ID:1} )等等。 – jjaderberg

+0

啊是的。我正在使用2.0(M06)的里程碑版本,不支持該語法,但呼叫良好。 –

+0

您在末尾提到了'length',但查詢中的'count'沒有任何意義 - 它只會返回結果的數量。 –