主流搜索引擎算法【分布式索引】
发布网友
发布时间:2023-04-07 08:17
我来回答
共1个回答
热心网友
时间:2023-05-02 09:48
当搜索引擎需要处理的 文档集合太多 的时候,就需要考虑分布式解决方案。每台机器维护整个索引的一部分,有多台机器协作来完成索引的建立和对查询的响应。
将整个文档集合切割成若干个子集合,而每台机器负责对某个文档子集合建立索引,并响应查询请求。
每个索引服务器负责 词典中部分单词 的倒排列表的建立和维护。
工作原理:一次一个单词。假设查询包含A、B、C三个单词,查询服务器接收到查询后,将查询转发到包含单词A倒排列表的索引服务器节点1,索引服务器节点1提取A的倒排列表,并累计计算搜索结果的中间的分,然后将查询和中间结果传递给包含单词B倒排列表的索引服务器节点,索引服务器节点2也是类似处理,并继续到索引服务器节点3。然后将最终结果返回给查询分发服务器,查询分发服务器计算得分最高的K个文档作为搜索结果输出。
两种方案比较
- 按文档比较常用,按单词划分只在特殊应用场合才使用。
- 按单词划分的不足:
可扩展性
搜索引擎处理的文档是经常变动的。如果按文档来对索引划分,只需要增加索引服务器,操作起来很方便。但如果是按单词进行索引划分,则对几乎所有的索引服务器都有直接影响,因为新增文档可能包含所有词典单词,即需要对每个单词的倒排列表进行更新,实现起来相对复杂。
负载均衡
常用单词的倒排列表非常庞大,可能会达到几十M大小。如果按文档划分,这种单词的倒排列表会比较均匀地分布在不同的索引服务器上,而按单词进行索引划分,某个常见单词的倒排列表全部内容都由一台索引服务器维护。如果该单词同时是一个流行词汇,那么该服务器会成为负载过大的性能瓶颈。
容错性
假设某台服务器出现故障。如果按文档进行划分,那么只影响部分文档子集合,其他索引服务器仍然能响应。但如果按单词进行划分,若索引服务器发生故障,则某些单词的倒排列表无法访问,用户查询这些单词的时候,会发现没有搜索结果,直接影响用户体验。
对查询处理方式的支持
按单词进行索引一次只能查询一个单词,而按文档划分的不受此*。