如何在 Gremlin 中推荐新朋友

How to suggest new friends in Gremlin

我有一个 orientdb 图形数据库设置,其中 User 为顶点,Friend 为边。

2 如果用户之间有 2 个边,则他们是朋友:

u1 --Friend --> u2 and u2 -- Friend --> u1

我如何使用 Gremlin 向 u1 推荐朋友的朋友,并确保这些人不是 u1 的当前朋友,只有一个 Gremlin 函数链?

到目前为止,这是我的 Gremlin 代码,但我想过滤掉已经与 u1 成为朋友的顶点:

u1.out('Friend').out('Friend').dedup()

我试过了,但似乎不起作用:

u1.out('Friend').out('Friend').dedup().filter{ it!= u1.out('Friend')}

感谢您的帮助:)。

我建议您也按一些 属性 对推荐进行排序,例如从起始用户到推荐用户的长度为 2 的路径数,因此应用 gremlin github home page.

上建议的基本协同过滤

应用于你的问题,我们可以这样写:

m = [:]; known = [u1]; u1.out('friend').aggregate(known).out('friend').except(known).groupCount(m)
m = m.sort{-it.value}

这为您提供了一个地图 m 按值降序排列的值,这些值是长度为 2 的不同路径的数量,并且将用户作为朋友推荐给用户 u1 的顶点作为键。

以下举例:

g = new TinkerGraph()
u1 = g.addVertex('u1')
u2 = g.addVertex('u2')
u3 = g.addVertex('u3')
u4 = g.addVertex('u4')
u5 = g.addVertex('u5')

g.addEdge(u1,u2,'friend')
g.addEdge(u2,u1,'friend')
g.addEdge(u2,u3,'friend')
g.addEdge(u3,u2,'friend')
g.addEdge(u1,u5,'friend')
g.addEdge(u5,u1,'friend')
g.addEdge(u5,u4,'friend')
g.addEdge(u4,u5,'friend')
g.addEdge(u2,u4,'friend')
g.addEdge(u4,u2,'friend')
g.addEdge(u5,u2,'friend')
g.addEdge(u2,u5,'friend')

用户u1建议查询后的地图内容为:

gremlin> m
==>v[u4]=2
==>v[u3]=1

也许你还需要考虑一下,没有对应的反方向的边,有向友情边对查询结果的影响...