Neo4j大规模的建议

时间:2014-08-16 20:45:10

标签: neo4j cypher

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

我通过创建(更新)may_know关系来设计这个,当用户编辑他们的个人资料或成为某人的朋友时我会通过MATCH u-[r:MAY_KNOW]-x RETURN * ORDER BY r.weight检索它们,这样人们就可以找到最喜欢他们的人 但我认为这不是一种最佳实践,因为很快就会知道每个用户之间的关系甚至可以达到数百万,并且扫描和分类会很费用

你有更好的主意吗?

1 个答案:

答案 0 :(得分:0)

取决于数据结构,我假设与城市,教育机构和朋友有关系。所以你实际上没有MAY_KNOW关系,因为那些只是推断出来的?

此外,这取决于您是否要在所有用户之间创建交叉产品(多少)以及您希望如何过滤掉非相关人员。

或许请查看Max的这篇博文:http://maxdemarzi.com/2013/04/19/match-making-with-neo4j/

这样的查询可能会起作用(取决于我在Java API中重写它的数据量)。

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