V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fiht
V2EX  ›  问与答

[求讨论] 网易云音乐的搜索功能怎么做?

  •  
  •   fiht · 2017-09-02 14:27:20 +08:00 · 4448 次点击
    这是一个创建于 2638 天前的主题,其中的信息可能已经有所发展或是发生改变。

    以查找单曲《枫》为例

    1. 查找《枫》,热度高的自动置顶,没毛病。用 MySQL select like sort by 可以实现 http://ww2.sinaimg.cn/large/0062TDWsgy1fj56y6dr6xj318m0eamzv.jpg

    2. 然后匹配专辑 http://ww2.sinaimg.cn/large/0062TDWsgy1fj5714w6ctj31920kwjvk.jpg 周杰伦的专辑置顶,其他的排在后面。

    想问的:

    1. 后台数据库大概是个什么模型?
    2. 怎么实现的

    问题空而广,但这个确实触及到我这个只会增差改删程序员的知识盲区了,求各位老板指教。希望能够甩出两个关键词我去学习学习。

    或者实际一点

    给你三张表,一个是专辑,一个是专辑中的歌曲,歌曲通过外键关联到专辑。以及各个歌曲的播放次数。怎么实现一套网易云音乐这样的搜索算法?

    6 条回复    2017-09-02 19:33:12 +08:00
    mpich
        1
    mpich  
       2017-09-02 15:37:54 +08:00   ❤️ 1
    你要的关键词:Elasticsearch
    bazingaterry
        2
    bazingaterry  
       2017-09-02 17:37:07 +08:00   ❤️ 1
    Elasticsearch + 1
    fiht
        3
    fiht  
    OP
       2017-09-02 19:02:46 +08:00
    @mpich @bazingaterry
    根据 ElasticSearch 调整各个参数的权重占比吗?
    mpich
        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,热门度,评论数,听过数目,被加到歌单的数目等等远超过其他,所以它不仅被检索到,还被排到了前面。
    mpich
        5
    mpich  
       2017-09-02 19:15:50 +08:00
    @fiht 不过,网易的检索肯定比我说的复杂,还有广告投放排序,feature 动态排序,特征层的矫正之类的,还会有检索用户(你)的使用习惯,用户 profile 之类的(这样才能每个人检索的排序不同)。不过我说的方案应该可以满足你的需求。
    fiht
        6
    fiht  
    OP
       2017-09-02 19:33:12 +08:00
    @mpich 多谢大佬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 02:36 · PVG 10:36 · LAX 18:36 · JFK 21:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.