2016-09-01 6 views
0

私はneo4jを使用しています。商品、カテゴリー、サブカテゴリーがあります。私はまだサブカテゴリーから購入されていない製品を残したい、あるいは製品推奨を言うことができます。私は特定の顧客によって購入されているそれらの製品とサブカテゴリを返すこのクエリを持っています、私はそれを逆にする方法や購入していない場所を使用する方法がわかりません、ありがとう!あなたがそれを行うことができますCypher - お客様が購入していない商品

MATCH (n:Customer {customerId : '323'})-[:PURCHASED]->()-[:PRODUCT]->(p:Product)-[:PART_OF_SUBCAT]->(sb:SubCategory) RETURN p,sb 
+1

要件を明確にすることはできますか?顧客から購入されていないすべてのサブカテゴリのすべての製品、またはユーザーが既に製品を購入したのと同じサブカテゴリのみを希望しますか?また、推奨された製品、または製品とそのサブカテゴリだけを返すことを望みますか? – InverseFalcon

+0

@InverseFalcon - ユーザーがすでに購入した商品と同じサブカテゴリから推薦された商品を返送したいと思います。ありがとうございます。 –

答えて

1

一つの方法は、ユーザーが購入した製品を収集し、そのコレクションに含まれていない同じ下位カテゴリーの製品に一致させることです。

MATCH (:Customer {customerId : '323'})-[:PURCHASED]->()-[:PRODUCT]->(p:Product)-[:PART_OF_SUBCAT]->(sb:SubCategory) 
WITH COLLECT(p) as boughtProducts, sb 
MATCH (recommended:Product)-[:PART_OF_SUBCAT]->(sb) 
WHERE NOT recommended IN boughtProducts 
RETURN DISTINCT recommended 

推奨されるアイテムの数が一定の場合は、最後にLIMIT句を追加することをお勧めします。

+0

完璧!ありがとう@InverseFalcon +1 –

関連する問題