写点什么

6.5 搜索引擎的基本架构

用户头像
张荣召
关注
发布于: 2020 年 11 月 02 日

1.互联网搜索引擎整体架构

2.爬虫系统架构

3.爬虫禁爬协议

      user-agent:GoogleBot

      Disallow:/tmp/

      Disallow:/cgi-bin/

      Disallow:/users/paranoid/

4.文档矩阵与倒排索引

   正排索引:文档====>关键词(文档中包含哪些关键词,建立索引)

       倒排索引:关键词====>文档(关键词出现在哪些文档中,建立索引)


     解析:“后端技术”的搜索结果:(2,4,5,7)与(1,2,4)取交集=(2,4)。

                 可支持万亿级别文档搜索。

5.带词频数与位置的倒排索引

6.Lucene 架构

   开源搜索引擎 Lucene 架构:

7.Lucene 倒排索引


8.Lucene 索引文件准实时更新

       索引有更新,就需要重新全量创建一个索引来替换原来的索引。这种方式在数据量很大是效率很低,并且创建一次索引的成本很高,性能也很差。

       Lucene 中引入了段的概念,将一个索引文件拆分为多个子文件,每个子文件叫做段。每个段都是一个独立的可被搜索的数据集,索引的修改针对段操作。

  • 新增:当有新的数据需要创建索引时,原来的段不变,选择新建一个段来存储新增的数据。

  • 删除:当需要删除数据时,在索引文件新增一个.del 的文件,用来专门存储被删除的数据 Id。当查询时,被删除的数据还是可以被查到的。

                     只是在文档链表合并时,才把已经删除的数据过滤掉。被删除的数据在进行段合并时,才会真正被移除。

  • 更新:更新的操作其实就是删除和新增的组合。先在.del 文件中记录旧数据,再在新段中添加一条更新后的数据。

      为了控制索引段的数据,我们必须定期合并段数据。

      优点:搜索功能很强大。

      缺点:不支持分布式集群。只能用一台服务器构建索引。如果数据量比较大,一台服务器可能不够用。高可用----服务器宕机,倒排索引丢失,也不能提供搜索服务

                 为了提高 Lucene 可用性,支持处理更大的数据规模,使用 ElasticSearch。

             

9.ElasticSearch 架构

  • 索引分片,实现分布式

  • 索引备份,实现高可用

  • API 更简单,更高级 

       理念:包装 Lucene,把 Lucene 的单机搜索引擎包装成了一个分布式集群。通过集群的方式,对外提供服务。

10.ElasticSearch 分片预分配与集群扩容

   PUT /my_index

       {

            "settings":{

                   "number_of_shards":2,

                   "number_of_replicas":0

             }

       }

       shard=hash(routing)%number_of_primary_shards

   解析: 分片预分配 2 片,可扩容一台服务器至两台,但是扩容到第三台服务器时,不能再进行扩容。预分配只有 2 片。

   解决:   一开始做好预分配。------集群规模与分片数目相关的。集群规模==分片数目时,无法在扩容。


   搜索引擎的核心:1.倒排索引如何建立。2.搜索如何通过倒排索引完成。3.数据如何获得的?爬虫。爬虫来的数据如何构建倒排索引。

   生产环境中常用的搜索引擎:ElasticSearch.


用户头像

张荣召

关注

还未添加个人签名 2018.05.02 加入

还未添加个人简介

评论

发布
暂无评论
6.5搜索引擎的基本架构