Query Forwarding in Geographically Distributed Search Engines
这篇论文讲的是,一个全球的搜索引擎,需要在不同的地区布署一套服务,不同地区的索引不同。注:这也很容易理解,首先是带宽的压力,索引一般都是TB级别的,不能到处拷;其次是性能考虑,不同地区用户关注的网页是不同的,把用户不需要的网页也加进索引里,会使得检索性能很差。
但是如果要地区的索引不能满足用户的需求,需要读取别的地区的索引的时候,怎么办?需要解决两个问题,一是是否需要读取别的地区的索引,二是读取哪些地方的索引。
所有检索都读取所有的索引,显然是不现实的。第一个问题比较好解决,只需要判断一下结果的质量,质量低于一定值就去读取别的地方的索引。第二个问题比较难解决。
论文里用的是线性规划解决第二个问题。这里很奇怪的是,论文里不考虑语言的差异,考虑到语言的差异,很多工作都会变容易,比如用户输入的是中文,需要去到美国的网页库才能找到比较好的结果的可能性比较少。当然如果用户查询敏感词例外。
下面介绍一下原文解决第二个问题的思路吧。首先是给在本地检索出的结果打分,然后预估一下别的地方的索引里的网页最高能打到多少分,如果分数偏低就不查询那个地方的索引。预估是很困难的。这里首先不能把排序算法看成是黑盒,而是看成基于成词出现次数线性叠加的排序算法,也就是BM25。然后线下构造一批长QUERY去查询,算出这些QUERY返回结果的分数。线上QUERY到来的时候,根据线下的QUERY预计分数。这里用到线性规划(LP)。把TERM理解成方程里的Xi,每个线下和长QUERY理解为Xi的不等式,比如某QUERY有TERM Xi,Xj,Xk,结果的分数为C,则列等式Xi+Xj+Xk < C。一个新的QUERY来的时候,先切出TERM,假设有TERM Xi,Xj,问题就变成了求解Xi+Xj的最大值。
每一个地区的索引,都查询一次这批QUERY,所有都有一套方程,不同地区分别算,如果算出某地区的解超过域值,则查询
能这样建模与RANK策略是分不开的,前面已经说了,是基于BM25的RANK,TERM的作用是线性叠加的。但是现实中的RANK策略要复杂很多,对这个模型的有效性表示怀疑。
个人觉得既然RANK只考虑TERM的出现次数,不如把每个TERM在每份索引里拉链的长度,全球存放,量不大,直接根据拉链长度作预估。
论文后面还讨论了,把部分热门的网页,在多个地区的索引里重复放。这个工作相对容易些,线下统计一下访问记录就可以了。但是如果追求时效性,还是很麻烦的。不过个人认为个工作也不一定要做得很通用,可以观察一下,认为哪些站点是全球通用的,哪些是只有当地人才上的。
再接着讨论了CACHE,这个就没什么意思了,这是通用的优化技术,跟QUERY转发,没啥关系
再接着讨论了一下将来可能的优化,包括:
(1)因为本地已经有部分结果,所以请求远端的时候,可以少请求些结果。这个方法不一定靠谱,很多检索系统,不管要几个结果,都要把倒排完全遍历才能找出最优解
(2)检索的过程是先检索完本地索引,发现结果不够,再请求外地的索引。可以考虑先展现本地结果,外地的结果回来之后,再刷新展示。这个用户体验很不好。
(3)根据等式预估出某QUERY肯定要请求外地结果,请求本地结果与外地结果并行。
(4)如果预估出,只需要要向一个外地索引请求,这时候就不用等到对方结果返回来,再MERGE,再返回给用户。而是在外地索引正在进行检索的时候,把本地结果传过去,等外地结果算出来的时候,就可以立即归并,然后返回给用户。本质是把检索与传数据并行。
(2)、(3)、(4)的本质是在不减少计算量的情况下,减少用户的等待
建议继续学习:
- 分布式缓存系统 Memcached 入门 (阅读:14722)
- 怎样用好Google进行搜索 (阅读:14663)
- Zookeeper工作原理 (阅读:10398)
- GFS, HDFS, Blob File System架构对比 (阅读:9381)
- Zookeeper研究和应用 (阅读:8519)
- 淘宝搜索:定向抓取网页技术漫谈 (阅读:8213)
- 分布式日志系统scribe使用手记 (阅读:8043)
- 一致性哈希算法及其在分布式系统中的应用 (阅读:7932)
- 分布式哈希和一致性哈希 (阅读:7662)
- HBase技术介绍 (阅读:6759)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:杨镇锋 来源: 我思故我在
- 标签: 分布式 搜索 线性
- 发布时间:2010-12-28 20:46:49
- [56] Oracle MTS模式下 进程地址与会话信
- [56] IOS安全–浅谈关于IOS加固的几种方法
- [55] 如何拿下简短的域名
- [54] 图书馆的世界纪录
- [53] android 开发入门
- [53] Go Reflect 性能
- [50] 读书笔记-壹百度:百度十年千倍的29条法则
- [49] 【社会化设计】自我(self)部分――欢迎区
- [38] 程序员技术练级攻略
- [33] 视觉调整-设计师 vs. 逻辑