问题描述
我能够使用以下代码在材料和购买该材料的最终用户之间建立关系 但是现在我想使用通用材料查找最终用户未购买的材料,并在图中显示为推荐引擎。假设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子句,但是它显示了所有产品
解决方法
这是我要解决的方法。
假设以下图表(基于您提供的方案):
为用户b推荐材料:
MATCH (user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
NOT((user)-[:BOUGHT]->(m))
AND user <> someOtherUser
RETURN m
哪个会得到结果:
同样,如果我们尝试使用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
我们得到的结果为空:
有关密码的一些解释:
(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