首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Neo4J密码:推荐使用NOT子句或任何产品

Neo4J密码:推荐使用NOT子句或任何产品
EN

Stack Overflow用户
提问于 2020-09-14 11:37:35
回答 1查看 95关注 0票数 0

我能够创建材料与使用下面代码购买它的最终用户之间的关系,但现在我想找到非enduser购买的材料,使用共同的材料,并在图中显示为推荐引擎。假设A购买1,2,3产品,B购买1,3产品,c有5,这里我想向B客户推荐产品2,c没有产品作为c,其余没有共同的产品推荐

代码语言:javascript
复制
 MATCH(f:material),(t:enduser) WHERE NOT (f)-[:BOUGHT]->(t) return f,t

我试过使用Not子句,但它显示了所有的产品。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-14 12:38:21

以下是我如何处理这个问题的方法。

假设下面的图表(基于您给出的场景):

向用户b推荐材料:

代码语言:javascript
复制
MATCH (user:EndUser{name:'b'})-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
WHERE
    NOT((user)-[:BOUGHT]->(m))
    AND user <> someOtherUser
RETURN m

结果是:

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

代码语言:javascript
复制
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给的用户和他/她购买的goto材料,然后对于每一个材料,我们都试图找到另一个同时拥有:BOUGHT材料的:EndUser。然后,对于他们中的每一个人,我们也会通过他们的:BOUGHT关系,把我们找到的这些材料称为m

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

如何在代码中使用它:

您通常会将参数用于所需的值(在本例中为name)。

python中的简单示例:

代码语言:javascript
复制
. . .

@staticmethod
def _create_recommendation_transaction(tx, name):
    result = tx.run(
    """
    MATCH (user:EndUser{name: $name })-[:BOUGHT]->(:Material)<-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]->(m:Material)
    WHERE
       NOT((user)-[:BOUGHT]->(m))
       AND user <> someOtherUser
    RETURN m
    """, name=name)
 
. . .
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63883504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档