实时搜索之微博(百度技术沙龙开放空间环境讨论主题)
实时搜索之微博
[文章作者:孙立 链接:http://www.cnblogs.com/sunli/ 更新时间:2010-08-18]
8月14日下午参加了infoq和百度共同举办的技术沙龙,主题是“走进搜索核心技术”,这也是我第一次参加infoq的聚会,感觉非常不错,不但免费,而且内容质量非常高,活动形式也非常的好,不幸的是回来后感冒发烧了。最后的OpenSpace(开放空间)环节,我所在组讨论了“实时搜索之微博”,非常荣幸我这次被选为组长上台给大家介绍了下,为了方便其他人,我就把讨论的结果记录下来了。
要构建一个基于微博的实时搜索,我们就必须选取一定的微博内容作为我们的基础。我们分为了三种类型:全网、站内,特殊。基于内容我们分为:微博内容,人和人的关系。
全网微博搜索可以通过统一提供的api获取数据,如没有api也可以进行spider爬取。如果决定针对不同的微博爬取的频率呢?百度的朋友讲的百度的实时搜索评价实时源的一些判断方式,那么微博可以通过flow人数和微博被转发的次数,发表的频率来决定微博的重要性,那么就可以决定我们对这个微博爬取的频率。
全网微博搜索爬取回来的内容也有一些特点,单条内容数据小,数据一旦发表就不再更新,有删除(对应百度的死链接处理),在当前国内的条件下,做全网搜索可能风险很大,对于言论的审核是个很大的问题。
站内的微博搜索获取数据比全网搜索要容易很多,暴力点就直接从数据存储(nysql,nosql什么都行)那里拿就可以了,还可以通过接口进行触发式的更新。
还有就是人和人的关系的获取可以通过follow和被follow的list页面获取。
对于获取到了数据的后续处理步骤:
1.过滤处理,去除无用信息,spam信息,重复信息。
2.百度,goole他们会有一套自己的pagerank算法,那么微博呢?我们组定义了一个follow-rank,它表示 follow,被follow,被转发,发表频率计算出来出来的一个rank值。最终的搜索结果还要结合时间,因为是实时搜索。
3.人的处理,我们觉得搜索人出来,应该是一个图,一个关系图,像一个拓扑图,星状图类似的。或者搜索一个人,比如“李开复”,可以显示出我可以通过那些最近的关系找到他。
实时索引处理:
跟百度的方法类似,根据时间段进行分段,当前索引段,近期,早期的(百度把当前索引库叫做流式库)。当前索引是构建在内存中的,以保证索引的性能,根据时间段定期进行合并到近期,早期。在搜索的时候同时并发的查询三个索引库,然后对结果进行merge.