我了解搜索引擎排名的基础知识,包括“反向索引”,“向量空间模型”,“余弦相似”,“PageRank”等的思想. 但是,当用户提交流行的查询字词时,很可能是包含该术语的数百万页.因此,搜索
但是,当用户提交流行的查询字词时,很可能是包含该术语的数百万页.因此,搜索引擎仍然需要实时分类数百万页.例如,我刚刚尝试在Google中搜索“Barack Obama”.显示“约937,000,000结果(0.49秒)”.在0.5秒内排名超过900M的物品?这真的打击了我的心!
1秒内搜索引擎如何排列这么多的物品?任何人都可以给我一些直观的想法或指出参考?
谢谢!
更新:
>到目前为止,大多数答复(包括一些较旧的讨论)似乎都是为“反向索引”贡献的.但是据我所知,反向索引只能帮助找到“相关页面”.换句话说,通过反向索引,Google可以获得包含“Barack Obama”(超过数十亿页)的900M页面.但是,目前仍然不清楚如何根据我读到的线程“排名”这些数百万个“相关页面”.
> MapReduce框架不可能成为实时排名的关键组成部分. MapReduce专为批处理任务而设计.当将工作提交给MapReduce框架时,响应时间通常至少需要一分钟,这显然太难以满足我们的要求.
例如,要从100万次点击中找到前100个结果,到selection algorithm时间复杂度为O(n log k).由于k = 100,n = 1,000,000,实际上我们可以忽略log(k).
现在,您只需要O(n)就可以在100万次点击中获得前100个结果.