6
我有一個成員和他們已經看過的項目圖。使用cypher/neo4j比較數組值
這些數據將用於根據類似成員查看的物品推薦物品。我想根據項目顏色的相似程度對項目進行排序。顏色以數組形式存儲([「紅色」,「藍色」,「綠色」))。有沒有什麼方法可以比較數組以查看它們有多少共同點?
我有一個成員和他們已經看過的項目圖。使用cypher/neo4j比較數組值
這些數據將用於根據類似成員查看的物品推薦物品。我想根據項目顏色的相似程度對項目進行排序。顏色以數組形式存儲([「紅色」,「藍色」,「綠色」))。有沒有什麼方法可以比較數組以查看它們有多少共同點?
給定兩個節點,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與解釋很好的答案,但(因爲答案假設2.0版,不妨)使用匹配屬性:'MATCH(N {ID:1} )等等。 – jjaderberg
啊是的。我正在使用2.0(M06)的里程碑版本,不支持該語法,但呼叫良好。 –
您在末尾提到了'length',但查詢中的'count'沒有任何意義 - 它只會返回結果的數量。 –