所以我想基于简单的协作过滤器向用户推荐帖子。过滤器应如下工作
所以我有第一部分,这会给我我的导师
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。它是一个2部分查询,我必须将一个查询结果提供给另一个,或者我可以将它们全部合并到一个查询中吗?
答案 0 :(得分:3)
我认为这可能会做你想要的:
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
在哈希映射中为您提供指导者组,其值为其权重。接下来,我们选择那些前20名(必须通过转换对它们进行排序),然后找到那些人喜欢的所有帖子,除了你喜欢的帖子。
答案 1 :(得分:0)
您可以在http://console.neo4j.org/r/meljiv上看到一个非常类似的示例,取自http://docs.neo4j.org/chunked/snapshot/cypher-cookbook-similar-favorites.html。
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