所以我想基于一个简单的协作过滤器向用户推荐帖子。过滤器应按如下方式工作
- 在我喜欢的帖子(我的导师组)中查找与我最相似的前 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;
对于第二部分,在这些导师中找到我尚未喜欢的最受欢迎的帖子。
我将如何在 cypher 或 gremlin 中运行第二部分(如果它更有效)。这是一个由两部分组成的查询,我必须将一个查询结果提供给另一个查询结果,还是可以将其全部合并到一个查询中?
最佳答案
我认为这可能会满足您的要求:
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]
哪里
g.V('uname','mike').out('likes').aggregate(p).in('likes').groupCount
在 HashMap 中为您提供导师组,其值是其权重。接下来,我们取出其中的前 20 个帖子(必须通过转换对它们进行排序),然后找到这些人喜欢的所有帖子(您喜欢的帖子除外)。
关于neo4j - 如何使用 neo4j 和 cypher 或 gremlin 创建简单的协作过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13499809/