匹配 mysql+php 中的相似列表
Matching similar lists in mysql+php
我有 2 个 table,
第一个是 playlists,其中包括标题、作者和日期信息。
other table 用于 tracks,包含艺术家、歌曲名称、专辑(等)、播放列表 ID、流行度列。
我想显示具有相似百分比的特定播放列表的相似播放列表。
想要的结果是这样的;
- 播放列表 #4 %70 类似于播放列表 #12
- 播放列表 #4 %62 类似于播放列表 #9
- 播放列表 #4 %35 类似于播放列表 #12
- 播放列表 #4 %10 类似于播放列表 #210
我尝试过 solr,但我最近发现了 SOLR,而且我对它很迷茫。在 mysql 中有什么方法可以做到这一点?
我唯一关心的是性能。可以有数千个播放列表。
ps: 一个播放列表最少5个最多10个items/tracks.
您可以将 tracks
table 加入自身,然后按播放列表分组,得出您自己的相似性指标——例如:
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 % 相似度当且仅当没有曲目出现在两个播放列表中。
我有 2 个 table, 第一个是 playlists,其中包括标题、作者和日期信息。 other table 用于 tracks,包含艺术家、歌曲名称、专辑(等)、播放列表 ID、流行度列。
我想显示具有相似百分比的特定播放列表的相似播放列表。
想要的结果是这样的;
- 播放列表 #4 %70 类似于播放列表 #12
- 播放列表 #4 %62 类似于播放列表 #9
- 播放列表 #4 %35 类似于播放列表 #12
- 播放列表 #4 %10 类似于播放列表 #210
我尝试过 solr,但我最近发现了 SOLR,而且我对它很迷茫。在 mysql 中有什么方法可以做到这一点?
我唯一关心的是性能。可以有数千个播放列表。 ps: 一个播放列表最少5个最多10个items/tracks.
您可以将 tracks
table 加入自身,然后按播放列表分组,得出您自己的相似性指标——例如:
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 % 相似度当且仅当没有曲目出现在两个播放列表中。