【问题标题】:neo4j - user suggestion with mutual countneo4j - 相互计数的用户建议
【发布时间】:2013-07-17 06:26:30
【问题描述】:

我在neo4j中创建了5个节点如下。

Node 1 {userid:1000, username: A, someOtherProperties...}
Node 2 {userid:2000, username: B, someOtherProperties...}
Node 3 {userid:3000, username: c, someOtherProperties...} 
Node 4 {userid:4000, username: D, someOtherProperties...} 
Node 5 {userid:5000, username: E, someOtherProperties...} 

节点 1 与节点 2 和 3 相连,节点 2 与节点 1、3、4 相连

1 -> 2
1 -> 3
2 -> 1
2 -> 3
2 -> 4
3 -> 4

现在我想要节点 1 的用户建议,其中包含那些未连接的节点 它自己与相互计数。我想要这样的结果。

node id  userid  username  mutual count
-------  ------  --------  -------------
4    4000    D         2             (which is node 2 & 3)
5    5000    E         0    

我尝试过密码查询,但没有成功。

【问题讨论】:

  • 您尝试了什么查询?可以分享一下吗?
  • 谢谢@Luanne。我试过以下查询: START user=node:node_auto_index("userid:*"), me=node:node_auto_index(userid = '92') WHERE user me WITH user MATCH pMutualFriends=me-[:friends]-> mf
  • 所以你正在寻找一个用户U,找到朋友U的所有朋友以及连接到朋友的朋友的U的朋友的数量?不知道为什么 E 在您的示例中出现,因为没有朋友与 E 相关联。也许我误解了您查询的目的?
  • 没有@Luanne。我也想要E。我想要所有用户,但它应该按相互计数的最大值到最小值排序。我只想在登录用户和其他用户之间显示 No Of Mutual Friends。因此,登录用户可以向该用户发送邀请。如果新用户不能有任何相互联系,尽管他/她可以根据他/她的城市或国家获得建议。还有一件事,我必须随机显示 10 条记录。谢谢。
  • 好的,如果这就是您想要的,那么您的查询就可以了。请注意,它可能真的很昂贵,因为您要匹配所有用户节点

标签: neo4j cypher social-networking mutual-friendship


【解决方案1】:

请尝试

START user=node:node_auto_index(name='A'), f=node(*) 
MATCH user-[r?:FRIEND*1..2]->(f) 
WITH DISTINCT r AS friendRelation,f 
RETURN count(friendRelation),f

这将为您提供与深度为 2(朋友的朋友)的每个其他节点的朋友关系数

【讨论】:

  • 谢谢@Luanne 我不需要朋友的朋友,但我想要节点 A 的共同朋友
  • 对不起,我很困惑。你能解释一下你所说的共同朋友是什么意思吗?对于图中的节点 A,console.neo4j.org/?id=h1p7it 的预期结果是什么
  • 对不起@Luanne,我的英语不好,这就是为什么我无法正确解释你的原因。再次抱歉。我需要所有具有相互计数的用户列表。意味着在我的情况下,node1(用户名:A)是登录用户,并且想要搜索以某个单词开头的其他用户(例如'aakas.*')。如果某个节点存在用户名“aakas”。此记录应显示为相互计数。你能得到我吗?还是需要更多解释?
  • 根据我的查询,我需要具有 1 个相互计数的 node2(B),其余的具有 0 个相互计数
  • 好吧,我明白了。所以 A 和 B 有一个共同的朋友,即 C - 是吗?
猜你喜欢
  • 2012-07-10
  • 2014-06-06
  • 1970-01-01
  • 2023-01-20
  • 1970-01-01
  • 2016-05-12
  • 2018-07-08
  • 1970-01-01
  • 2022-07-15
相关资源
最近更新 更多