有效的方法来合并分页分布式索引过帐以进行分页

时间:2014-01-14 13:21:20

标签: algorithm sorting search search-engine

这是分布式搜索引擎系统,在1秒内处理50~100个请求。

每个搜索请求都需要在多个服务器之间合并排序搜索的文档。

有1个主服务器和N个从服务器。

每个从属服务器都有包含分数数据的文档ID列表(Entry [])。

参赛作品如下。

| docuemnt id(int)|得分数据(byte [])|

主服务器必须合并排序每个从属服务器条目列表并制作页面数据(例如:5000~5100)

限制1)不要使用大量内存。无法一次对内存中的整个文档进行合并排序。 限制2)不要使用临时文件。临时文件可能会使搜索系统变慢。

如果用户想要N个文件从R开始(意味着等级R),那么..


解-1)  1.在每个从属服务器上制作顶级R + N排序列表,并将其发送到主服务器。 (使用堆结构)  2.主服务器合并 - 排序并生成Top R + N.  3.从R

开始返回N个文件

问题-1)  1.每个从属服务器必须在内存中维护Top R + N文档  2.如果master在内存中获取每个从属服务器R + N文档,则可能发生Outofmemory错误。


解-2)  1.每个从服务器将未分类的文档列表与分数数据一起发送到主服务器。(用于内存限制的数据块)  2.主服务器执行n路合并排序

问题-2)  1.用户只需要N个文件,但是从服务器必须发送整个文件列表。(网络传输数据过大)


对于这种情况还有其他任何好的解决方案吗?

我认为从R生成排序的N文档需要计算每个docuemnt列表驻留在从属服务器之间,是不是?

哪个好? "本地排序和远程合并"或者"远程整个列表" ?

我被困了一周。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您应该将此问题视为不同的观点。 显示以后的结果页面是高成本的工作,并且它很少使用。 搜索引擎必须提供排名靠前的用户所需文档。 用户必须能够在不到10页的页面中找到有意义的文档。 例如,亚马逊仅为总搜索结果提供前20页,为cateogry指定的搜索结果提供400页。 这意味着如果搜索引擎提供高质量的结果,则无需数千个结果页面。 查看此文档:http://www.slideshare.net/songaal/ss-30031348