数学之美系列五 -- 简单之美:布尔代数和搜索引擎的索引
2006年5月10日 上午 09:10:00
发表者: 吴军,Google
研究员
[建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。我们在介绍
Google Page Rank (网页排名)
时已经谈到了一些排序的问题,这里我们谈谈索引问题,以后我们还会谈如何度量网页的相关性,和进行网页自动下载。]
世界上不可能有比二进制更简单的计数方法了,也不可能有比布尔运算更简单的运算了。尽管今天每个搜索引擎都宣称自己如何聪明、多么智能化,其实从根本上讲都没有逃出布尔运算的框框。
布尔(George Boole)
spider
只负责抓取页面并直接保存页面及url地址(可多个spider,每个spider有编号)
spider manager 负责管理spider状态,并负责为spider提供任务URL列表
PageAnalyzer manager
负责管理页面分析器状态,提供关键词对应HASH的保存位置查询
PageAnalyzer 页面分析器,负责分析URL和分析关键词
分析出的url传递给相应spider manager的任务队列 分析出的关键词建立索引 找到保存位置存在相关关键词索引中
如果该关键词没建立过索引 则由该PageAnalyzer建立对应索引 并提供关键词HASH给PageAnalyzer manager
向spider manager投递的任务必须保证已经是检测过 最近没爬行的url
IndexAnalyzer 关键词分析器
IndexWrite 索引建立程序
DateBasePool 数据池,建立数据库内存映射
目前主要考虑到的功能模块,正在研究模块通讯的方式和架构瓶径,希望进一步细化整个搜索引擎的功能.考虑做成个开源项目,希望有兴趣,有时间的朋友与我联系,合作开发.
新浪的BLOG似乎没法上传文件,代码只好放GAMERES了
建立索引时候汉语不分词,直接以最小单位字建立索引,搜索时候三字以下不用词库,直接考虑三字相连的索引
以上分词经验来源于老鼠,高人一句话解决了很多问题,不过这种情况下,索引似乎有点大了,常用汉字就三千多个吧.
怎么提高索引效率,又成了新问题!
在DotLucene.net上下载了DotLuceneAPISearchDemo-1.1这个例子的代码,发现其实这个项目不过是Lucene.Net的一个应用实例.其分析器,indexer..所有东西都是引用的Lucene.Net命名空间里的类.
在Lucene.Net项目里有个Lucene.Net.NLS项目该项目实现了Lucene.Net的多国语言.于是赶紧在网上down了那项目代码,编译出Lucene.Net.An璦lysis.Cn.dll
引用Lucene.Net.An璦lysis.Cn命名空间,以ChineseAnalysis来替换StandardAnalyzer就可以建立中文关键词的索引了,同时也把searcher工程里StandardAnalyzer替换成ChineseAnalysis,这样就可以把DotLuceneAPISearchDemo-1.1改造成支持中文的整站搜索程序.