1. 图的遍历方法有两种,深度优先和广度优先。搜索引擎中的爬虫是通过广度优先策略来爬取网页的。搜索引擎为什么选择广度优先策略,而不是深度优先策略呢?

搜索引擎要优先爬取权重较高的页面,离种子网页越近,较大可能权重更高,广度优先更合适。

2. 大部分搜索引擎在结果显示的时候,都支持摘要信息和网页快照。你知道如何改造吗?

摘要信息:
增加 summary.bin 和 summary_offset.bin。在抽取网页文本信息后,取出前 80-160 个字作为摘要,写入到 summary.bin,并将偏移位置写入到 summary_offset.bin。
summary.bin 格式:
doc_id \t summary_size \t summary \r\n\r\n
summary_offset.bin 格式:
doc_id \t offset \r\n
Google 搜索结果中显示的摘要是搜索词附近的文本。如果要实现这种效果,可以保存全部网页文本,构建搜索结果时,在网页文本中查找搜索词位置,截取搜索词附近文本。

网页快照:
可以把 doc_raw.bin 当作快照,增加 doc_raw_offset.bin 记录 doc_id 在 doc_raw.bin 中的偏移位置。
doc_raw_offset.bin 格式:
doc_id \t offset \r\n

要点

搜索引擎大致可以分为四个部分:搜集、分析、索引、查询。
搜集,就是我们常说的利用爬虫爬取网页。
分析,主要负责网页内容抽取、分词,构建临时索引,计算 PageRank 值这几部分工作。
索引,主要负责通过分析阶段得到的临时索引,构建倒排索引。
查询,主要负责响应用户的请求,根据倒排索引获取相关网页,计算网页排名,返回查询结果给用户。

搜集:将广度优先搜索的优先队列存储在磁盘文件links.bin,有布隆过滤器判重并定期写入磁盘文件bloom_filter.bin,将访问到的原始网页数据存入磁盘文件doc_raw.bin,计数分配网页编号并与其链接对应关系存入磁盘文件doc_id.bin。

分析:首先抽取网页文本信息,依据HTML语法规范,通过AC自动机多模式串匹配算法,去除网页中格式化部分,提取文本内容。然后分词并创建临时索引,分词的目的是找到能够标识网页文本“身份”的特征,可借助词库(通过Trie树实现)搜索文本中与词库匹配的最长词语,因为一般情况下越长信息越多,越剧有表征能力。分词完成后得到一组用于表征网页的单词列表,与其对应的网页编号存入磁盘文件tmp_index.bin作为临时索引,为节省空间单词是以单词编号的形式写入,单词文本与编号的对应关系写入磁盘文本term_id.bin。

索引:通过临时索引构建倒排索引文件index.bin。倒排索引其实是以单词为主键,将临时索引中的多个相同单词行合并为一行。通过以单词为主键的排序算法,可以将相同单词的行连续排列在一起,之后只要将单词相同的连续行合并为一行即可。由于数据量大,应采用分治策略。最后建立所有单词在倒排索引文件中位置的索引文件term_offset.bin,以方便快速查找。

查询:
先对搜索条件文本做分词处理,然后去term_id.bin查单词们的编号,再查term_offset.bin找到单词们在倒排索引中的位置,到index.bin找到每个单词对应的网页编号,通过网页出现次数、预评权重和统计算法(如pagerank、tf-idf)计算网页的优先次序并输出。最后在doc_in.bin中找到网页链接按序输出显示给用户。

  • doc_id.bin:记录网页链接和编号之间的对应关系。

  • term_id.bin:记录单词和编号之间的对应关系。

  • index.bin:倒排索引文件,记录每个单词编号以及对应包含它的网页编号列表。

  • term_offsert.bin:记录每个单词编号在倒排索引文件中的偏移位置。

关于搜索引擎:搜集、分析、索引、查询。相关推荐

  1. Elasticsearch——分布式搜索引擎01(索引库、文档、RestAPI、RestClient、拼音分词器、IK分词器)

    Elasticsearch--分布式搜索引擎01(索引库.文档.RestAPI.RestClient.拼音分词器.IK分词器) 一.初识 elesticsearch 1.1 简介 1.2 倒排索引(重 ...

  2. 第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)基本的索引和文档CRUD操作、增、删、改、查...

    第三百六十二节,Python分布式爬虫打造搜索引擎Scrapy精讲-elasticsearch(搜索引擎)基本的索引和文档CRUD操作.增.删.改.查 elasticsearch(搜索引擎)基本的索引 ...

  3. JAVA中Explain注解用法,mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  4. postgreSQL源码分析——索引的建立与使用——GIN索引(3)

    2021SC@SDUSC 本篇博客继续讲解GIN索引创建和插入相关的函数,并讲解GIN索引的查询过程 目录 GIN索引的创建 ginbuild 插入函数 ginEntryInsert GIN索引查询 ...

  5. Mysql索引查询失效的情况

    首先,复习一下索引的创建: 普通的索引的创建: CREATE INDEX  (自定义)索引名  ON  数据表(字段); 复合索引的创建: CREATE INDEX  (自定义)索引名  ON  数据 ...

  6. 网上搜集的MySQL查询语句大全集锦(经典珍藏)

    原文地址为: 网上搜集的MySQL查询语句大全集锦(经典珍藏) SQL查询语句大全集锦 MYSQL查询语句大全集锦 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW ...

  7. 用PostgreSQL 做实时高效 搜索引擎 - 全文检索、模糊查询、正则查询、相似查询、ADHOC查询...

    用PostgreSQL 做实时高效 搜索引擎 - 全文检索.模糊查询.正则查询.相似查询.ADHOC查询 作者 digoal 日期 2017-12-05 标签 PostgreSQL , 搜索引擎 , ...

  8. mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  9. mysql查询01课程比02课程_小菜菜mysql练习解读分析2——查询存在 01 课程但可能不存在 02 课程的情况(不存在时显示为 null )...

    "查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )" --翻译为:课程表里面,存在01的信息,未必满 ...

  10. mysql源码分析——索引的数据结构

    引子 说几句题外话,在京被困三个月之久,不能回家,所以这个源码分析就中断了.之所以在家搞这个数据库的源码分析,主要是在家环境齐全,公司的电脑老旧不堪.意外事件往往打断正常的习惯和运行轨迹,但这却是正常 ...

最新文章

  1. java 中lock,java中lock获取锁的四种方法
  2. Angular Table test
  3. 设计模式——Template Method模板方法
  4. 【今日CS 视觉论文速览】11 Dec 2018
  5. Ubunut14.04安装wps最新方法
  6. 分布式一致性算法-paxos详解与分析
  7. 二阶无源低通滤波器幅频特性曲线_一文看懂二阶lc低通滤波器的设计及原理
  8. Ubuntu 20.04 搭建hadoop 集群
  9. 初学unity(简单场景制作)
  10. 没有U盘怎么给电视盒子装软件?新手必看三种方法
  11. Android系统sdcard目录
  12. ubuntu上安装drcom
  13. “那不勒斯”服务器芯片,那不勒斯定名 AMD发布全新CPU品牌EPYC
  14. 联想天逸 510S 2022怎么样
  15. F004-兰博基尼工程师得花多少年才能买一辆Lamborghini #F650
  16. iOS开发技术-实验一-简易计算器实现
  17. cad相对坐标快捷键_Auto CAD中常用的快捷键(1)
  18. lcd屏和amoled屏哪个护眼呢 lcd屏和amoled屏哪个更耗电
  19. 解决 输入kubectl get pods -o wide后没有显示ip
  20. Java性能调优工具:MAT内存分析工具,上万字带你彻底了解

热门文章

  1. TH2830 TH2831 TH2832 TH283X系列紧凑型LCR数字电桥技术参数
  2. bzoj1599【Usaco2008 Oct]笨重的石子
  3. cardinality mysql_Cardinality统计取值不准确导致MYSQL选错索引
  4. 七夕送对象什么礼物最实用?盘点保护视力的护眼灯
  5. 中兴通讯goldenDB分布式数据库在实际应用中的方案解析
  6. gBuilder内测活动圆满收官
  7. 换脸系统php,【AI换脸】Faceswap源代码换脸软件安装指南(转)
  8. Python tailer模块的使用
  9. WebCam snap应用实例
  10. html转图片 workflow,用 Workflow + Day one 给未来的自己做时间履历 | Matrix 精选