Neo4j关于大规模生产的建议

Neo4j关于大规模生产的建议,neo4j,cypher,Neo4j,Cypher,我需要为我的项目实施一个建议系统 在这个系统中,我们应该根据当前城市、教育程度、朋友的朋友等参数来推荐人 我是通过creatingupdate设计的,当用户编辑他们的个人资料或与某人成为朋友时,我可能知道关系,我将通过匹配u-[r:may_知道]-x RETURN*ORDER by r.weight来检索他们,这样人们就可以找到他们最喜欢的人 但我认为这不是一个最佳实践,因为很快可能知道每个用户之间的关系可能达到甚至百万,扫描和排序它们将花费巨大的成本 你有更好的想法吗?这取决于数据结构,我认为

我需要为我的项目实施一个建议系统 在这个系统中,我们应该根据当前城市、教育程度、朋友的朋友等参数来推荐人

我是通过creatingupdate设计的,当用户编辑他们的个人资料或与某人成为朋友时,我可能知道关系,我将通过匹配u-[r:may_知道]-x RETURN*ORDER by r.weight来检索他们,这样人们就可以找到他们最喜欢的人 但我认为这不是一个最佳实践,因为很快可能知道每个用户之间的关系可能达到甚至百万,扫描和排序它们将花费巨大的成本


你有更好的想法吗?

这取决于数据结构,我认为这与城市、教育设施和朋友有关系。所以你实际上没有可能知道的关系,因为它们只是推断出来的

此外,这还取决于您是否希望在所有用户之间创建交叉产品,以及您希望筛选出多少不相关的用户

也许可以查看Max的这篇博文:

因此,类似这样的查询可能会根据我在JavaAPI中重写的数据量而工作

match (p:Person {id:{user_id})
match (p)-[:LIVES_IN]->(:City)<-[:LIVES_IN]-(other)
match (p)-[:GRADUATED]->(:School)<-[:GRADUATED]-(other)
match (p)-[:KNOWS]->(:Person)<-[:KNOWS]-(other)
RETURN other

在查询中添加深度限制即时好友=1,好友好友=2,等等。可能从限制最具辨别力的因素开始?如果直接朋友、城市和教育程度比2级或3级朋友的朋友更具辨别力。例如,我将同一城市的权重设为1,因此当用户选择他/城市时,我将在创建时将该城市的每个人的may_-know关系合并为1,否则我将权重值增加1。同样适用于权重为0.5的朋友的朋友,以及权重为2的研究领域。将建议限制在一个因素是我的最后选择。还有其他解决方案吗?