|
标签:杂谈 |
|
标签:杂谈 |
|
标签:杂谈 |
|
标签:文学/原创 |
|
标签:it/科技 |
1.
第一阶段:2005年7月~2005年8月
项目主要参与人员: nid, martin, idoloveyou(顾问)
主要贡献:完成华中大在线1.0版本。并成功推出了http://so.hustonline.net。这是我们网站第一次尝试做FTP搜索引擎,也算是圆了martin长久以来的一个梦想:)教育网内960万数据采集,1个星期到15天的更新速度,在当时可以算是比较强大了。整套代码用C++完成,数据存储使用的是SQLServer2000。搭配SQLServer2000的全文检索。
主要问题:因为使用的是C++的API,所以我们不能够灵活的对FTP文件的类别和其他一些信息进行采集。另外,SQLServer2000的全文检索也是有局限性的。搜索mp3,txt这种结果很多的关键词就会造成效率低下。
第二阶段:2006年1月~2006年7月
项目主要参与人员:nid, martin, hjr, lrl
主要贡献:针对第一个版本遇到的问题,完全摒弃使用原先的C++。重新使用C#。重写了Crawler部分。大大提高了采集FTP数据的灵活性。为了提高效率首次尝试使用了基于.net remoting的分布式搜索技术。数据存储换成了SQLserver2005。在索
FreqFile (.frq) --> <TermFreqs, SkipData>TermCount
TermFreqs --> <TermFreq>DocFreq
TermFreq --> DocDelta, Freq?
SkipData --> <SkipDatum>DocFreq/SkipInterval
SkipDatum --> DocSkip,FreqSkip,ProxSkip
DocDelta,Freq,DocSkip,FreqSkip,ProxSkip --> VInt
这里是lucene中的核心文件结构,在这里要重点强调的不是倒排索引。而是一个叫做SkipData的结构:
下面来列举一个例子:
假设我们有A,B关键词和他们的倒排索引表:
A 1 3 5 7 11 55 66 109...
B 55 110 135 150...
找两者的匹配值,我们通常的做法是发现A中第一个比B小,于是我们移动A中的指针。发现A中的下一个元素3还是比B中第一个元素55要小。于是我们依次移动直到找到55和B中的第一个元素匹配为止,总共要进行6次操作
现在,在lucene中,我们可以设置一个skipinterval的值,这个数值用来告诉我们,一次比较失败以后往后跳动的条目数量,比如