一、互联网搜索引擎整体架构
通过搜索引擎,快速检索互联网上的页面内容,互联网页面规模庞大,万亿级数据,一方面,搜索引擎把互联网页面收录起来,统一通过爬虫把页面存储在搜索引擎内部,另一方面,构建搜索引擎,以便快速获取想要的数据内容
爬虫,爬的就是一系列的文本,然后,从这些文本中进行各种校验去重
倒排索引,快速检索
链接关系,对检索出来的内容,进行排序,通过链接关系 PageRank 进行排序,不同页面会有不同权重的分,返回给用户一个经过权重值排序后的数据
二、爬虫系统架构
这个过程不就是原来 19e 的火车团队进行爬虫的方式
三、爬虫禁爬协议
这是一个共同遵守的协议
四、文档矩阵与倒排索引
正排索引,文档里面包含了哪些词,文档对应的词有哪些
倒排索引,词对应的文档有哪些
复制代码
五、带词频的倒排索引
六、带词频与位置的倒排索引
七、Lucene 架构
自己的系统优化数据存储和数据访问,比较成熟的方案就是Lucene
复制代码
八、Lucene 索引文件准实时更新
索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大时效率很低,并且由于创建一次索引的成本很高,性能也很差。
Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段,每个段都是一个独立的可被搜索的数据集,索引的修改针对段进行操作。
• 新增:当有新的数据需要创建索引时,原来的段不变,选择新建一个段来存储新增的数据。
• 删除:当需要删除数据时,在索引文件新增一个 .del 的文件,用来专门存储被删除的数据ID。当查询时,被删除的数据还是可以被查到的,只是在进行文档链表合并时,才把已经删除的数据过滤掉。被删除的数据在进行段合并时才会被真正被移除。
• 更新:更新的操作其实就是删除和新增的组合,先在 .del 文件中记录旧数据,再在新段中添加一条更新后的数据。
为了控制索引里段的数量,我们必须定期进行段合并操作
缺点:
不支持分布式集群
复制代码
九、ElasticSearch 架构
为了高可用,更大规模处理数据,常用ES,本质就是包装了Lucene,实现集群功能
• 索引分片,实现分布式
• 索引备份,实现高可用
• API 更简单、更高级
复制代码
十、ES 分片预分配与集群扩容
扩容单位以分片为主,如果分片有2个,而扩容有三个,则不起作用
因此,需要提前规划未来有多少台服务器,进而可以进行分片处理
把ES当作NoSql使用,作为存储使用,也越来越多
复制代码
评论