2005年的老博,转到此空间来
讲座来源:www.matrix.org.cn
对一个搜索引擎来讲, 比较传统的架构会是这样的: crawler - index engine - search engine. crawler就是一个不断从网上将网页抓下来的一个引擎,如百度的spider,trs的雷达. index engine是一个索引引擎. search engine就是检索引擎.
<一> crawler
【关键技术】
1.分布式,多线程抓取.任务的调度问题.
2.网页重要性的评估, crawler不会把所有网页都抓下来,只会抓20%的网页下来,因此必须评估网页的重要性.一般,评估技术会用到page rank算法.
3.refresh policy. 每经过一段时间,crawler都必须更新网页,从而保证索引的网页是最新的网页。最简单的更新策略就是把所有网页重新下载一次,但是这个耗费的时间起码是一个月
4.压缩算法,Crawler抓下来的东西,分布式的存储在本地。要一个优秀的压缩机制来减少总的存储容量。将来在各个数据服务器间传输数据都需要一个优秀的压缩算法,从来减少通讯带来的带宽负担。
<二> index engine
对存储进行索引就是Index engine要做的事情。这里索引都是指完全的全文索引,而不是只对字的索引,或者只对词的索引。有些国内的检索引擎是对字的索引或者对词的索引,或者两者的结合。
【关键技术】
1.一般来讲,因为数据量是很大,所以索引的容量也会很大,数据量和索引量的比例一般会是1:1。所以,索引的存储也会是分布式的。最简单的索引就是倒排索引,lucene就是用的这个.
2.Index engine 必须支持增量索引,而且增量索引速度应该很快。这个问题,通常的解决方法,是为新增的数据新建一个新的索引块,然后在一定时间,将这个新的索引块并入旧的索引块。比如lucene里就是这么做的。
3.索引有一个压缩的问题,因为通常数据量和索引量的比例会是1:1,如果压缩算法做的比较好的话,应该可以得到更好的一个比例。lucene这方面做的比较一般.
4.多语言的问题,索引必须支持多语言.现在unicode可以很好的解决这个问题
5.索引的结构还必须为检索,相似性分析,等等提供良好的计算接口.比如google和baidu的类似网页,为了很快找到类似网页,这些数据也必须放到索引里面去.
6.当然,支持doc,excel,ps 等多种文件格式,这个是基本的东西了
<三> search engine
索引建好之后,就是为了search 服务了.通常流程是这样的,用户发出请求 <-> search engine<-> index server
【关键技术】
1. 检索结果的排序问题,这个其实前面的page rank做了很多铺垫的,一些新的尝试,比如对用户偏好的分析之类的,都可以运用在这里,对不同偏好的用户采用不同的排序策略
2.检索结果的排重问题,就是排除重复的结果.
3.检索结果的相似性分析问题
4.检索的速度问题.