搜索引擎的实现原理,可以看作四步:从互联网上抓取网页→建立索引数据库→在索引数据库中搜索→对搜索结果进行处理和排序。
1、从互联网上抓取网页
利用能够从互联网上自动收集网页的“网络蜘蛛”自动访问互联网,从互联网上抓取网页,把网页送入“网页数据库”,从网页中“提取URL”,把URL送入“URL数据库”,“蜘蛛控制”得到网页的URL,控制“网络蜘蛛”抓取其它网页,反复循环直到把所有的网页抓取完成。
2、建立索引数据库
由索引系统程序对收集回来的网页进行分析,从“网页数据库”中得到文本信息,送入“文本索引”模块建立索引,提取相关网页信息(包括网页所在URL、编码类型、页面内容包含的关键词、关键词位置、生成时间、大小、与其它网页的链接关系,标题,来源,类别,是否已经被解析等),根据一定的相关度算法进行大量复杂计算,得到每一个网页针对页面内容中及超链中每一个关键词的相关度(或重要性),然后用这些相关信息建立网页索引数据库,形成“索引数据库”。同时进行“链接信息提取”,把链接信息(包括锚文本、链接本身等信息)送入“链接数据库”,为“网页评级”提供依据。
数据的索引分为三个步骤:网页内容的提取、词的识别、标引库的建立。
互联网上大部分信息都是以HTML格式存在,对于索引来说,只处理文本信息。因此需要把网页中文本内容提取出来,过滤掉一些脚本标示符和一些无用的广告信息,同时记录文本的版面格式信息。
词的识别是搜索引擎中非常关键的一部分,通过字典文件对网页内的词进行识别。对于西文信息来说,需要识别词的不同形式,例如:单复数、过去式、组合词、词根等,对于一些亚洲语言(中文、日文、韩文等)需要进行分词处理。识别出网页中的每个词,并分配唯一的wordID号,用于为数据索引中的标引模块服务。
标引库的建立是数据索引中结构最复杂的一部分。一般需要建立两种标引:文档标引和关键词标引。文档标引分配每个网页一个唯一的docID号,根据docID标引出在这个网页中出现过多少过wordID,每个wordID出现的次数、位置、大小写格式等,形成docID对应wordID的数据列表;关键词标引其实是对文档标引的逆标引,根据wordID标引出这个词出现在那些网页(用wordID表示),出现在每个网页的次数、位置、大小写格式等,形成wordID对应docID的列表。
3、在索引数据库中搜索
搜索的处理过程是对用户的搜索请求进行满足的过程,当用户输入关键词搜索后,通过提交查询请求给“查询服务器”,搜索服务器对应关键词字典,把搜索关键词转化为wordID,然后在标引库中得到docID列表,对docID列表进行扫描和wordID的匹配,从网页“索引数据库”中找到符合该关键词的所有相关网页。
4、对搜索结果进行处理排序
所有相关网页针对该关键词的相关信息在索引库中都有记录,“网页评级”把查询请求和链接信息结合起来对搜索结果进行相关度的评价,通过“查询服务器”按照相关度进行排序,返回前K篇结果(不同的搜索引擎每页的搜索结果数不同)返回给用户。如果用户查看的第二页或者第多少页,重新进行搜索,把排序结果中在第K+1到2*K的网页组织返回给用户。相关度越高,排名越靠前,同时提取关键词的内容摘要。最后由页面生成系统将搜索结果的链接地址和页面内容摘要等内容组织起来返回给用户。
相关文章
- js实现原生Ajax的封装及ajax原理详解
- 分享非常漂亮的WPF界面框架源码及插件化实现原理
- 语音识别中的MFCC的提取原理和MATLAB实现
- 浅析Web实时通信的方法总结:短轮询/长轮询/SSE/Websocket的介绍及性能和兼容性对比、SSE的工作原理及如何实现
- React Native之新架构中的Turbo Module实现原理分析
- truetype技术和矢量字库的技术原理及实现(转)
- 【ZABBIX】SNMPtrap实现主动监控的原理与安装配置
- Spring Boot中的@Scheduled注解:定时任务的原理与实现-4. 总结
- 一种基于动态水位值的Flink调度优化算法(flink1.5以前),等同于实现flink的Credit-based反压原理
- 【转载】多尺度增强算法Retinex算法(MSRCR)的原理、实现及应用