鹏之徙于南冥也,水击三千里,抟扶摇而上者九万里

C++,算法,COM/ATL,设计模式,服务器,数据仓库,DirectUI
随笔 - 1, 文章 - 0, 评论 - 1, 引用 - 0
数据加载中……

搜索引擎的工作原理

        最近在设计数据仓库,里面一个需求就是实现海量文本记录的内容检索,应该说这也是搜索引擎需要做的事情,于是研究了一下搜索引擎的实现原理,也算有了一个较全面的认识,在这里总结一下,转载请注明出处。

        当我们在百度搜索栏键入一条内容,单击查询的时候,百度返回了若干相关网页信息,事实上这些信息并不是百度自己的,而是百度通过网络爬虫在万维网收集得到的,网络爬虫根据一个URL地址下载网页信息(文本),之后有两个工作:1、提取网页信息中的全部URL,保存到未爬取的URL池,处理完成后将当前URL保存到已爬取URL池(如果该URL在未爬取URL存在,还必须从中消除);2、提取URL的工作完成后将网页内容派发给网页预处理模块(后面再讨论)。网络爬虫的关键技术就是怎样从抓取的信息中提取URL和管理URL池,前者可以通过正则表达式来得到全部URL,管理URL池的做法通常是使用带计数功能的Bloom Filter,这样就可以删除某条记录。当然,多线程是不可少的。

        搜索引擎最核心的部分就是网页预处理模块,在这里会将爬虫传来的网页正文数据进行压缩存储(这样才能给查询模块返回一些有用的信息,可见需要海量存储支持,这必定使得系统是分布式的),这里也是利用正则表达式,因为正文中的脚本语句是需要剔除的。当然,仅仅存储正文是不够的,至少还需要保存原始网页的消息摘要(可以检测出网页是否有更新,通常MD5就够用),保存时间(方便下次爬取时判断时间间隔),正文保存位置(这里还包括文件中的偏移,用来解压正文数据)。除了保存这些资料,预处理模块还会分析正文部分的关键词,用来修改倒排索引,这里对正文中出现的关键词映射追加一条URL记录和在正文出现的位置。衡量一个搜索引擎的搜索精确性,也就是在对于对关键词的抓取,对常用词的搜集和基于查询次数的统计可以得到最好的关键词库,所以用户越多,词库越强大,百度无疑是国内最好的中文搜索引擎。实现预处理模块的难点在于怎样对正文进行关键词识别,不同的实现对查询结果的正确性有很大影响,这也是整个搜索引擎最精华的部分。

        最后是查询模块,当然必须提供给用户一个查询页面,然后还需要架设自己的Web服务器,用来处理用户的查询请求,这个过程也包括关键词识别拆分,然后根据倒排索引得到各个关键词的URL信息,如果发现几个关键词在同一个URL页面中都有出现,说明这个网页很可能是用户需要的,它的排序优先级应该高于其他URL,然后对Top10中的各个URL提取正文信息,截取关键词出现的一小段位置,返回给用户。

posted on 2011-01-16 19:12 Leo_ 阅读(1866) 评论(1)  编辑 收藏 引用 所属分类: 开发笔记

评论

# re: 搜索引擎的工作原理  回复  更多评论   

和我构思的基本相同
2011-01-23 03:00 | php

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理