2014-10-29 78 views
2

我正在neo4j中進行一個簡單的演示,我想根據訂單使用推薦以及如何購買。我在這裏創建了一個圖表:http://console.neo4j.org/?id=jvqr95如何在Neo4j中簡單推薦

基本上我有很多關係,如:

(o:Order)-[:INCLUDES]->(p:Product) 

一個訂單可以有多個產品。

給出了具體的產品ID,我想尋找其他的產品,在盛裝產品與給定的產品ID的訂單,我想通過訂單的產品在數量來訂購吧。

我試過以下內容:

MATCH (p:Product)--(o)-[:INCLUDES]->(p2:Product)--(o2) 
WHERE p.name = "chocolate" 
RETURN p2, COUNT(DISTINCT o2) 

但這並沒有給我我想要的結果。對於查詢我有望獲得chips回來計數2,但我只得到1

計數而對於follwing查詢:

MATCH (p:Product)--(o)-[:INCLUDES]->(p2:Product)--(o2) 
WHERE p.name = "chips" 
RETURN p2, COUNT(DISTINCT o2) 

我期望能獲得chocolateball放回原處每個人都有1的計數,但我沒有得到任何回報。我錯過了什麼?

回答

4

你在最初的MATCH中匹配了太多東西。

MATCH (o:Order)-[:INCLUDES]->(p:Product { name:'ball' }) 
MATCH (o)-[:INCLUDES]->(p2:Product) 
WHERE p2 <> p 
MATCH (o2:Order)-[:INCLUDES]->(p2) 
RETURN p2.name AS Product, COUNT(o2) AS Count 
ORDER BY Count DESC 

英文:。「匹配的訂單,其中包括特定產品對於這些訂單,取得不屬於最初的產品都包含產品對於這些產品,配上它們包含在訂單返回產品名稱以及包含在其中的訂單數「。

http://console.neo4j.org/?id=q49sx6

http://console.neo4j.org/?id=uy3t9e

+2

真棒!我使用'p.name =「chips」'的原因是因爲後來我想做同樣的查詢但是有多個產品。也就是說,我已經把產品x,y,z按順序排列,其他人買了什麼,買了這些產品。所以我正在考慮使用類似於:'WHERE p.name IN [「x」,「y」,「z」] AND NOT(p2.name IN [「x」,「y」,「z」]) '。無論哪種方式,非常感謝。 – 2014-10-29 08:08:10

+0

聽起來不錯。我只是使用速記版。 :) – 2014-10-29 17:48:57