建议基于关系的相似性

时间:2017-12-27 11:01:40

标签: neo4j cypher recommendation-engine

我想基于当前购物车内容与其他(已经放置)订单相比创建推荐引擎,并考虑使用如下图表:

<objectAnimator
    android:propertyName="strokeLineCap"
    android:valueFrom="2"
    android:valueTo="0"
    android:valueType="floatType"
    android:duration="500"
    android:interpolator="@android:interpolator/fast_out_slow_in" />

我是Neo4j / Cypher的新手,如果有人能指出我对下面问题的正确方向,我将不胜感激:

  1. 是否有可能根据我当前的购物车获取其他已经下订单,这些订单包含最相似的产品(至少是我当前购物车中的产品)并推荐delta产品,即减去我们共同拥有的产品并推荐其他的......这可能吗?

  2. 我们说没有其他订单包含我购物车中的所有商品。是否有一种方法可以根据共同下降的产品数量对订单进行分组,并获取&#34; delta产品&#34;对于每个订单(让我们说前10个订单)?

1 个答案:

答案 0 :(得分:0)

问题不是很清楚,但我会尽力提供答案:

  

是否有可能根据我当前的购物车获取其他已经下订单,这些订单包含最相似的产品(至少是我在当前购物车中的产品)并推荐delta产品,即减去我们共同的产品并推荐其他的......这可能吗?

是的,有可能。减法可能非常棘手(因为Cypher目前缺少MINUS子句),但您可以使用列表推导来计算它:

WITH [1, 2, 3, 4] AS xs, [3, 4, 5] AS ys
RETURN [x IN xs WHERE NOT x IN ys | x]

此外,如果你减去关系,你可能想要使用负模式条件(WHERE NOT <pattern>):

MATCH (p:Product) ...
WHERE NOT (p)-[:SOME_REL_TYPE]->(:SomeNodeLabel)
RETURN p
  

假设没有其他订单包含我购物车中的所有产品。是否有一种方法可以根据共同下降的产品数量对订单进行分组,并为每个订单获取“delta产品”(假设前10个订单)?

要计算常见产品的数量,请使用针对同一MATCH节点的p子句。

MATCH
  (u1:User {id: $currentUser})-[:PUT_ORDER]->(:Order)-[:CONTAINS_PRODUCT]->(p:Product),
  (u2:User)-[:PUT_ORDER]->(:Order)-[:CONTAINS_PRODUCT]->(p)
WITH u1, u2, count(p) AS commonProducts
ORDER BY commonProducts DESC
LIMIT 10
// continue calculation with u1, u2