如何使用neo4j和cypher或gremlin创建简单的协作过滤器

如何使用neo4j和cypher或gremlin创建简单的协作过滤器,neo4j,cypher,gremlin,Neo4j,Cypher,Gremlin,因此,我想基于一个简单的协作过滤器向用户推荐帖子。过滤器的工作原理如下 在我喜欢的帖子中找到与我最相似的前n名用户(我的导师小组) 在这个导师小组中找到我还不喜欢的最受欢迎的帖子 所以我有第一部分,这将给我我的导师 START me=node:node_auto_index(uname = "mike") MATCH me-[:LIKES]->posts<-[:LIKES]-mentors RETURN person.uname, count(posts) ORDER BY coun

因此,我想基于一个简单的协作过滤器向用户推荐帖子。过滤器的工作原理如下

  • 在我喜欢的帖子中找到与我最相似的前n名用户(我的导师小组)
  • 在这个导师小组中找到我还不喜欢的最受欢迎的帖子
  • 所以我有第一部分,这将给我我的导师

    START me=node:node_auto_index(uname = "mike")
    MATCH me-[:LIKES]->posts<-[:LIKES]-mentors
    RETURN person.uname, count(posts)
    ORDER BY count(posts) DESC LIMIT 20;
    
    START me=node:node\u auto\u index(uname=“mike”)
    
    匹配我-[:LIKES]->posts我想这可能会满足您的需求:

    p = [] as Set
    g.V('uname','mike').out('likes').aggregate(p).in('likes').groupCount.cap.transform{it.sort{-it.value}[0..19].keySet()}.scatter.out('likes').except(p).groupCount.cap.sort{-it.value}[0..4]
    
    在哪里


    在哈希映射中为您提供mentor组,值为其权重。接下来,我们选取前20名(必须通过转换对其进行排序),然后找到这些人喜欢的所有帖子,除了你喜欢的帖子。

    你可以在上看到一个非常类似的例子,摘自

    START me=node:node\u auto\u index(name=“Joe”)
    
    MATCH me-[:favorite]->Stuff我猜你的意思是
    导师。uname
    我们实际上是想得到最爱的人,而不是那些人,所以你列出的这个例子让我们得到了第一部分,导师组,但没有得到推荐的最爱帖子的第二部分。在匹配阶段再添加一个关系:START me=node:node\u auto\u index(name=“Joe”)匹配我-[:最爱]->东西
    g.V('uname','mike').out('likes').aggregate(p).in('likes').groupCount
    
    START me=node:node_auto_index(name = "Joe")
    MATCH me-[:favorite]->stuff<-[:favorite]-person
    WHERE NOT(me-[:friend]-person)
    RETURN person.name, count(stuff)
    ORDER BY count(stuff) DESC