我有2张桌子, 第一个是播放列表,其中包括标题,作者和日期信息。 其他表格适用于曲目,包含艺术家,歌曲名称,专辑(等),播放列表,热门栏目。
我想为具有相似百分比的特定播放列表显示类似的播放列表。
期望的结果就像;
我已经尝试过solr,但我最近发现了SOLR,我很遗憾。我有办法在mysql中做到这一点吗?
我唯一关心的是表现。可以有数千个播放列表。 ps:播放列表最少有5个项目/轨道。
答案 0 :(得分:1)
您可以将tracks
表加入到自身中,然后按播放列表分组,派生您自己的相似性指标 - 例如:
SELECT t1.playlistid, t2.playlistid,
(
1/COUNT(DISTINCT t1.artist, t1.song_name)
+ 1/COUNT(DISTINCT t2.artist, t2.song_name)
)
* SUM(t1.artist = t2.artist AND t1.song_name = t2.song_name)/2 similarity
FROM tracks t1 JOIN tracks t2 ON t2.playlistid > t1.playlistid
GROUP BY t1.playlistid, t2.playlistid
这应该给出显示在另一个播放列表中的每个播放列表的曲目的平均百分比(artist
和song_name
):因此如果两个播放列表包含完全相同的曲目和0%相似度,则100%相似iff两个播放列表中都没有曲目。