在 neo4j 中寻找不同的关系
Finding distinct relations in neo4j
我有一个包含用户、曲目和 DJ 的 neo4j 数据库,其中用户与 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 相关,但我不知道将它放在哪里(count(distinct t) 未给出所需的结果)。另一种方法是将数据库重组为只有一个 PLAYED 关系,并将 PLAYED 的时间戳 属性 存储为数组。
在这种情况下,我想执行查询(在其他地方)询问 "find all tracks this dj played after this timestamp",这也可以解决这个问题,但我不知道如何解决。
提前致谢
你的密码语句已经非常接近解决方案了。但是,您正在为轨道聚合并希望使用与该轨道的关系计数是权重,请注意我已将 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;
我有一个包含用户、曲目和 DJ 的 neo4j 数据库,其中用户与 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 相关,但我不知道将它放在哪里(count(distinct t) 未给出所需的结果)。另一种方法是将数据库重组为只有一个 PLAYED 关系,并将 PLAYED 的时间戳 属性 存储为数组。
在这种情况下,我想执行查询(在其他地方)询问 "find all tracks this dj played after this timestamp",这也可以解决这个问题,但我不知道如何解决。
提前致谢
你的密码语句已经非常接近解决方案了。但是,您正在为轨道聚合并希望使用与该轨道的关系计数是权重,请注意我已将 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;