查找《枫》,热度高的自动置顶,没毛病。用 MySQL select like sort by 可以实现
然后匹配专辑 周杰伦的专辑置顶,其他的排在后面。
问题空而广,但这个确实触及到我这个只会增差改删程序员的知识盲区了,求各位老板指教。希望能够甩出两个关键词我去学习学习。
给你三张表,一个是专辑,一个是专辑中的歌曲,歌曲通过外键关联到专辑。以及各个歌曲的播放次数。怎么实现一套网易云音乐这样的搜索算法?
1
mpich 2017-09-02 15:37:54 +08:00 1
你要的关键词:Elasticsearch
|
2
bazingaterry 2017-09-02 17:37:07 +08:00 1
Elasticsearch + 1
|
3
fiht OP |
4
mpich 2017-09-02 19:13:36 +08:00 1
@fiht 啥参数比?
你用 ES 的话需要根据索引,定义不同的 doc,每个 doc 可以定义一个自己的静态分,然后搜索的时候会有 bm25 或者 tfidf 做相关性分,可以让静态分和相关性分相乘。 举例来说,专辑是一个 index,歌也是一个 index,两个是不同的,专辑里面的 doc 可以是整张专辑里面所有的歌的信息,歌名,歌词之类的。静态分可以用你所能想到的所有关于这个 doc 的 feature。专辑发售年份,历史热门度,近期热门度,评论数量,点赞数量,是否有 mv,etc,这些 feature 需要根据你的业务场景和产品战略来决策和加权。静态分可以固定时间计算一次,然后重写索引。 你说的这个场景里面,应该是“枫”这个字虽然并没有出现在专辑 titile 里,但是出现了在了专辑所含有的歌曲信息里(专辑 index 里面的 doc 包含有歌曲信息),所以让这张专辑能够拥有足够的相关性分被检索到。 接着这张专辑的其他 feature,热门度,评论数,听过数目,被加到歌单的数目等等远超过其他,所以它不仅被检索到,还被排到了前面。 |