搜索引擎

搜索引擎大致可以分为四个部分:搜集、分析、索引、查询。
搜集:利用爬虫爬取网页。
搜索引擎把整个互联网看作数据结构中的有向图,把每个页面看作一个顶点。如果某个页面中包含另外一个页面,那我们就在这两个顶点之间连一条有向边。可以找一些权重比较高的网页,按照广度优先的策略,不停地从队列中取出链接,然后爬取对应地网页。
1.待爬取网页链接文件:links.bin(支持断电续爬)
可能内存中队列的链接会越来越多,直到内存也放不下,所以可以将链接存储在磁盘中的文件来作为广度优先搜索的队列。
2.网页判重文件:bloom_filter.bin
布隆过滤器,为了预防断电丢失,将布隆过滤器持久化到磁盘中,存储在bloom_filter.bin文件中。
3.原始网页存储文件:doc_raw.bin
把多个网页存储在一个文件中,每个网页通过一定的标识进行分割。
在这里插入图片描述
4.网页链接及其编号对应的文件:doc_id.bin
维护一个中心计数器,每爬取一个网页,从计数器哪一个编号分配给该网页。同时将网页链接跟编号之间的关系存储在另一个doc_id.bin文件中。

分析:负责网页内容抽取,分词,构建临时索引。
1.抽取网页文本信息
网页时是结构化数据。去掉无用数据
2.分词并创建临时索引
字典——词库,对分词文本采用最长匹配规则,每个网页的文本信息在分词完成后,我们都得到一组单词列表,我们把单词与网页之间的对应关系,写入到一个临时索引文件中(tmp_index.bin),这个临时索引文件用来构建倒排索引文件。
在这里插入图片描述
我们还需要使用散列表,记录已经编过号的单词。在对网页文本信息分词的过程中,我们拿分割出来的单词,先到散列表中查找,如果找到,那就直接使用已有的编号;如果没有找到,我们再去计数器中拿号码,并且将这个新单词以及编号添加到散列表中。当所有网页处理完成后,我们将这个单词跟编号之间的对应关系,写入到磁盘文件中,并且命名为**(单词编号文件)term_id.bin**。

索引:通过分析阶段得到的临时索引,构建倒排索引。
负责将分析阶段产生的临时索引,构建成倒排索引。
在这里插入图片描述
对临时索引文件采用多路归并排序的方法,将其分割成多个小文件,先对每个小文件独立排序,最后再合并在一起
在这里插入图片描述
除了倒排文件之外,我们还需要一个文件,来记录每个单词编号在倒排索引文件中的偏移位置。我们把这个文件命名为term_offset.bin。这个文件的作用是,帮助我们快速地查找某个单词编号在倒排索引中存储的位置,进而快速地从倒排索引中读取单词编号对应的网页编号列表。

查询:响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户。
1.doc_id.bin:记录网页链接和编号之间的对应关系。
2.term_id.bin:记录单词和编号之间的对应关系。
3.index.bin:倒排索引文件,记录每个单词编号以及对应包含它的网页编号列表。
4.term_offsert.bin:记录每个单词编号在倒排索引文件中的偏移位置。

当用户在搜索框中,输入某个查询文本的时候,我们先对用户输入的文本进行分词处理。假设分分词之后,我们得到 k 个单词。
我们拿这 k 个单词,去 term_id.bin 对应的散列表中,查找对应的单词编号。经过这个查询之后,我们得到了这 k 个单词对应的单词编号。
我们拿这 k 个单词编号,去 term_offset.bin对应的散列表中,查找每个单词编号在倒排索引文件中的偏移位置。经过这个查询之后,我们得到了 k 个偏移位置。
我们拿这 k 个偏移位置,去倒排索引(index.bin)中,查找 k 个单词对应的包含它的网页编号列表。经过这一步查询之后,我们得到了 k 个网页编号列表。
我们针对这 k 个网页编号列表,统计每个网页编号出现的次数。具体到实现层面,我们可以借助散列表来进行统计。统计得到的结果,我们按照出现次数的多少,从小到大排序。出现次数越多,说明包含越多的用户查询单词(用户输入的搜索文本,经过分词之后的单词)。
经过这一系列查询,我们就得到了一组排好序的网页编号。我们拿着网页编号,去 doc_id.bin文件中查找对应的网页链接,分页显示给用户就可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值