Neo4J cypher:推荐使用NOT子句或任何子句的产品

问题描述

我能够使用以下代码在材料和购买该材料的最终用户之间建立关系 但是现在我想使用通用材料查找最终用户未购买的材料,并在图中显示为推荐引擎。假设A购买了1,2,3产品,B购买了1,3产品,c有5,这里我想向B客户推荐产品2,而c没有产品,因为c和其余产品没有共同推荐的产品>

 MATCH(f:material),(t:enduser) WHERE NOT (f)-[:BOUGHT]->(t) return f,t

我尝试使用Not子句,但是它显示了所有产品

解决方法

这是我要解决的方法。

假设以下图表(基于您提供的方案):

enter image description here

为用户b推荐材料:

MATCH (user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
    NOT((user)-[:BOUGHT]->(m))
    AND user <> someOtherUser
RETURN m

哪个会得到结果:

enter image description here

同样,如果我们尝试使用USER-C,我们将得到:

MATCH (user:EndUser{name:'c'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
    NOT((user)-[:BOUGHT]->(m))
    AND user <> someOtherUser
RETURN m

我们得到的结果为空:

enter image description here

有关密码的一些解释:

(user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)部分首先匹配我们试图向其推荐:Material的用户以及转到他/她购买的材料的位置,然后针对每种材料我们试图找到另一个{{1} }同时拥有:EndUser资料的人。然后,对于他们每个人,我们也要遍历他们的:BOUGHT关系,并将这些材料称为:BOUGHT

然后m试图确保用户(我们试图推荐)没有直接购买该商品,并且NOT((user)-[:BOUGHT]->(m))部分检查该用户以及我们拥有的其他user <> someOtherUser节点在处理过程中发现的节点不是相同的节点(例如通过循环)。

如何在代码中使用它:

通常将parameters用于所需的值(在本示例中为:User)。

python中的简单示例:

name

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...