主流搜索引擎算法【分布式索引】

分布式索引(Parallel Indexing)

当搜索引擎需要处理的文档集合太多的时候,就需要考虑分布式解决方案。每台机器维护整个索引的一部分,有多台机器协作来完成索引的建立和对查询的响应。

- 按文档划分(Document Paritioning)

将整个文档集合切割成若干个子集合,而每台机器负责对某个文档子集合建立索引,并响应查询请求。

- 按单词划分(Term Paritioning)【可操作性不强】

每个索引服务器负责词典中部分单词的倒排列表的建立和维护。

工作原理:一次一个单词。假设查询包含A、B、C三个单词,查询服务器接收到查询后,将查询转发到包含单词A倒排列表的索引服务器节点1,索引服务器节点1提取A的倒排列表,并累计计算搜索结果的中间的分,然后将查询和中间结果传递给包含单词B倒排列表的索引服务器节点,索引服务器节点2也是类似处理,并继续到索引服务器节点3。然后将最终结果返回给查询分发服务器,查询分发服务器计算得分最高的K个文档作为搜索结果输出。

两种方案比较

- 按文档比较常用,按单词划分只在特殊应用场合才使用。

- 按单词划分的不足:

可扩展性

搜索引擎处理的文档是经常变动的。如果按文档来对索引划分,只需要增加索引服务器,操作起来很方便。但如果是按单词进行索引划分,则对几乎所有的索引服务器都有直接影响,因为新增文档可能包含所有词典单词,即需要对每个单词的倒排列表进行更新,实现起来相对复杂。

负载均衡

常用单词的倒排列表非常庞大,可能会达到几十M大小。如果按文档划分,这种单词的倒排列表会比较均匀地分布在不同的索引服务器上,而按单词进行索引划分,某个常见单词的倒排列表全部内容都由一台索引服务器维护。如果该单词同时是一个流行词汇,那么该服务器会成为负载过大的性能瓶颈。

容错性

假设某台服务器出现故障。如果按文档进行划分,那么只影响部分文档子集合,其他索引服务器仍然能响应。但如果按单词进行划分,若索引服务器发生故障,则某些单词的倒排列表无法访问,用户查询这些单词的时候,会发现没有搜索结果,直接影响用户体验。

对查询处理方式的支持

按单词进行索引一次只能查询一个单词,而按文档划分的不受此限制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容