在neo4j中找到明显的关系

时间:2015-03-13 08:49:39

标签: neo4j

我有一个neo4j数据库,包含用户,曲目和DJ,用户与DJ有相似之处,而DJ则播放曲目。现在我想找到与用户有相似之处的DJ播放的所有曲目,如

MATCH (u:User {userId:'6'})-[s:SIMILARITY]->(dj:Dj)-[p:PLAYED]->(t:Track)
return COUNT(t)*s.similarity AS count,t order by count;

问题是dj可以多次播放曲目,我用DJ和曲目之间的多个PLAYED关系表示。因此,如果dj多次播放曲目,则此查询会增加权重,并且我只希望将这些多重关系计为一次。

解决方案可能与DISTINCT有关,但我不知道在哪里放置它(计数(不同的t)没有给出所需的结果)。另一种方法是将数据库重组为仅一个PLAYED关系,并将PLAYED的timestamp属性存储为数组。

在这种情况下,我想执行一个查询(在其他地方)询问"找到此dj在此时间戳之后播放的所有曲目",这也可以解决这个问题,但我不会&#39不知道怎么做。

提前致谢

1 个答案:

答案 0 :(得分:2)

您的cypher声明已经非常接近解决方案了。但是,您要为该曲目进行汇总,并希望使用该曲目的关系计数为权重,请注意我已将count(t)更改为count(p)

MATCH (u:User {userId:'6'})-[s:SIMILARITY]->(dj:Dj)-[p:PLAYED]->(t:Track)
return t, COUNT(p)*s.similarity AS weight order by weight;