【问题标题】:Neo4J cypher:recommend products using NOT clause or anyNeo4J cypher:推荐产品使用 NOT 子句或任何
【发布时间】:2021-01-01 03:04:38
【问题描述】:

我可以使用以下代码在材料和购买它的最终用户之间建立关系 但现在我想找到最终用户没有使用共同材料购买的材料,并在图中显示为推荐引擎。假设 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 子句,但它显示所有产品

【问题讨论】:

    标签: database neo4j cypher graph-databases cql


    【解决方案1】:

    这是我解决问题的方法。

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

    为用户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]-&gt;(:Material)&lt;-[:BOUGHT]-(someOtherUser:EndUser)-[:BOUGHT]-&gt;(m:Material) 部分首先匹配我们尝试向其推荐:Material 的用户和转到他/她购买的材料,然后对于每个材料,我们都试图找到另一个:EndUser 也有@987654333 @ 材料。然后,对于他们每个人,我们也会查看他们的:BOUGHT 关系,并将我们找到的这些材料称为m。

    然后NOT((user)-[:BOUGHT]-&gt;(m)) 试图确保用户(我们试图推荐给)没有直接购买该项目,user &lt;&gt; someOtherUser 部分检查用户和我们在处理过程中发现的另一个 :User 节点不是相同的节点(例如循环)。

    如何在代码中使用它:

    您通常会使用parameters 作为所需的值(在本例中为name)。

    python中的简单示例:

    . . .
    
    @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)
     
    . . .
    

    【讨论】:

    • 谢谢@Tibebes。米。这对我有用。我正在处理 124k 记录的大型数据集,这对我帮助很大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2014-06-06
    • 2010-10-22
    • 1970-01-01
    相关资源
    最近更新 更多