@xuemingdeng
2017-09-19T14:57:55.000000Z
字数 2376
阅读 531
未分类
Reddit的CTO Chris Slowe、工程副总裁Nick Caldwell和工程总监Luis Bitencourt-Emilio在Reddit网站上披露了Reddit搜索模块的发展史。以下内容翻译自博客内容,查看原文The Search for Better Search at Reddit。
在过去,新来的工程师总会问:“什么时候可以把我们的搜索引擎弄好?”在今年之前,我们的答案通常是:“到5楼去问问搜索引擎团队吧。”但实际上到5楼的电梯按钮根本不管用,而且根本不存在什么搜索引擎团队。
但时代在改变。我们现在很高兴地宣布,Reddit新的搜索模块诞生了。在过去几周,它已经承担了Reddit 50%的搜索流量,提供了将近5亿次搜索。现在我们很有信心可以让它承担起100%的流量,我们也希望你们能够喜欢这样更快也更稳定的搜索结果!
我们在Reddit开辟了一个与搜索相关的产品单元,并由工程总监Luis领导该产品。我们也意识到这些技术对Reddit的未来来说是至关重要的。我们的平台拥有世界上最有趣的内容,包括2.5亿个帖子,而且每天都在增长,但苦于难以对这些内容进行搜索。通过改善搜索体验,用户就可以直接在主页上定制想阅读的内容。
Reddit搜索模块简史
做好搜索不是件轻而易举的事情,在过去的12年中,我们的搜索架构经历了6次技术栈演化。
数据摄取(ingest)
在进行搜索系统迁移的过程中,最大的挑战莫过于更新索引管道了。在进行第一次尝试时,我们为了加快速度,直接使用了我们的遗留ETL系统,这个系统由Jenkins和Azkaban组成,我们在上面运行很多Hive查询。从下图可以看出,将多个数据源并入单个点进行索引比我们预期的要复杂得多。
在进行第二次尝试时,我们使用了更简单的方案,也得到了更好的结果。我们把整个管道分成了四个简单地Hive查询,在索引帖子方面提升了33%的速度。另一方面,我们只索引新创建的帖子,同时实时地更新投票和评论的相关度。
提升相关性
低相关度的搜索是没有意义的。在发布搜索系统的时候,我们的主要目标就是要保证搜索结果的相关性不受影响。
我们将新系统和旧系统的搜索结果页面的点击率进行了对比。一个完美的搜索引擎,它提供的搜索结果(排名靠前的部分)会有100%的点击率。当然,我们知道完美的搜索引擎是不存在的,所以我们使用Mean Reciprocal Rank和Discounted Cumulative Gain算法来对比搜索结果的质量。
从图中可以看出,Fusion的线条形状更锐利,可见我们在相关度方面还有很大提升的空间,而且可以进行个性定制、机器学习以及查询优化和重写。
发布推广
在解决了数据摄取和相关度问题之后,我们要让更多的Reddit用户使用它。来自社区的反馈对我们来说是非常有价值的,他们发现了一些表层的bug和一些不常见的问题。刚开始我们只让1%的用户使用我们的新系统,然后是5%、10%、25%,在发布GA版本的时候是50%。
我们可以很自信地说Reddit现在的搜索模块比以往任何时候都要好。对Reddit所有的内容进行重新索引只需要5个小时(之前是11个小时),而且我们还持续更新索引。错误率下降了两个数量级,99%的搜索都能在500毫秒内完成。机器数量从原先的200多台下降到30多台,我们因此节约了很多成本。
搜索的未来
我们希望新的搜索模块能够让大家更容易地在Reddit上找到自己感兴趣的内容。但我们不会止步于此,做好搜索只是我们迈出的第一步,我们希望在个性化和相关性方面给Reddit用户带来更好的体验。