罗刚搜索引擎 自己动手写搜索引擎
本书是猎兔企业搜索开发团队的软件产品研发和项目实践的经验汇总。本书全方位展现出一个商用级别的Lucene搜索解决方案,主要包括爬虫、自然语言处理和搜索实现部分。
爬虫部分介绍了网页遍历方法和从网页提取主要内容的方法。
自然语言处理部分包括了中文分词从理论到实现以及在搜索引擎中的实用等细节。
其他自然语言处理的经典问题与实现包括:文档排重、文本分类、自动聚类、语法解析树、拼写检查、拼音转换等理论与实现方法。
在实现搜索方面,本书用简单的例子介绍了完整的搜索实现过程,覆盖了从索引库的设计和索引库与数据库的同步到搜索用户界面设计与实现。搜索用户界面包括实现布尔逻辑查询、按区间范围查询、搜索结果按日期排序等。本书还进一步介绍了搜索排序的优化方法。
最后以基于Lucene的搜索服务器Solr为例,展示了Lucene的最新应用方法。
自己动手写搜索引擎前 言编辑
15 在中国,随着互联网从城市到农村的普及,搜索引擎对日常生活产生越来越大的影响。例如,笔者自己一般每天就有15个左右的问题需要求助于搜索引擎。从04年开始笔者也从数据库相关软件开发转入搜索引擎相关开发工作。
Google 20世纪末,在美国国家科学基金会的支持下,斯坦福大学的两个学生在他们的教授指导下开始了一个数字图书馆项目。后来,他们创建了Google公司,开创了通过互联网搜索技术共享人类信息的新纪元。Google通过网络广告取得了巨大的商业回报,到现在仍然是世界500强企业中赢利能力最强的公司之一。NASDAQ证券交易市场的最高股价是Google公司的股票。搜索引擎开发成为一项极有含金量的技术。
Web开始写作《自己动手写搜索引擎》这本书以前,已经有一些介绍搜索理论或者搜索开发工具的图书,但是往往表现出来的是纯粹的理论推导和公式定理,或者仅仅是现成开源软件的介绍、分析和使用,并没有介绍其理论依据。
有的读者是数学专业的博士,对于相关的数学模型一看就明白,但对于算法实现可能仍然缺少经验。有的读者是培训学校毕业的学生,可能对Web开发框架和软件工具的使用很熟悉,但缺少理论基础和深入创新的能力。本书的一个特点在于前面是原理介绍,接着是具体的代码实现。不仅讲解抽象的知识,更重要的是把知识转化成具体软件应用的过程也展示出来。
Lucene 《自己动手写搜索引擎》是猎兔企业搜索开发团队的软件产品研发和项目实践的经验汇总。感谢Lucene,它把搜索引擎开发工作变成了广大程序员都能够参与的游戏。所以本书选用Lucene来全方位展现一个商用级别的搜索解决方案。
中文分词当前仍然是实现中文搜索的热门话题之一。本书重点介绍了中文分词的相关理论和代码实现,以及在搜索引擎中实用中文分词等细节。本书用简单的例子介绍了搜索引擎完整的实现过程,同时也没有忽略一些经典的算法实现。
该书适合需要具体实现搜索引擎的程序员使用,对于自然语言处理等相关研究人员也有一定参考价值,同时猎兔搜索团队也已经开发出以本书为基础的专门培训课程。本书附带光盘中的代码经过了详细的注释。为了帮助初学者更容易地了解程序的功能,经过笔者的精心整理后,每个主要变量和每行主要的执行程序都加上了注释,前后对比图如下所示。
3年 笔者花了3年时间编写本书,但限于时间和水平,其中很多内容笔者仍然正在改写中,希望读者不吝赐教,使本书在重印时内容能更全面。如果条件允许,笔者也很愿意探索一些非比寻常的方式来介绍技术。
API 笔者把写书的过程看成是笔者自身和作者所组建的技术团队修炼和提高的过程。笔者相信技术高手并非天生,而是来源于对卓越品质的追求和自我的不断提升。起点低不是问题,笔者所在的搜索开发团队就包括一些高中学历的程序员,不愿意学习和深入钻研问题才是最大的问题。
从企业知识管理的角度,这本书也是有益的。团队里每次有新人进来,我们都先把相关文档发给他们,这样内部交流技术就多了一些基础,不用每次都从Lucene最基本的API等这些基本知识开始介绍。
搜索 从学习的过程来看,有人会问:“你没有去过**公司,怎么知道开发搜索引擎?”笔者没有去过大的搜索公司,所以只能从公开的论文、资料和代码等开始学习。感谢搜索引擎技术本身的发展,这方面的学习材料越来越容易通过搜索获得。
笔者没有在课堂上学习过自然语言处理等方面的课程,刚开始做中文分词的时候,吴春尧博士问:“你知不知道语言模型?”笔者当时对这些概念一无所知。但是通过了解中文分词程序每一行代码的作用,阅读相关的论文,终于了解了其中一些常用的数学方法。
Solr 从开发过程来看,首先由客户或者其他开发人员提出问题,解决问题,重新审查整个过程并寻找更好的解决方法。比如实现搜索结果中分类统计,最开始用QueryFilter方法可以实现基本的功能,后来Solr的作者实现了一个更快的DocSetHitCollector方法,如果用查表法来改进这个DocSetHitCollector方法可以达到比Solr官方版本更快的计算速度。
搜索软件开发的过程借用日本产品研发大师稻盛和夫的话与大家共勉——“对产品的现场,重新进行审视、体察、贴心、倾听。这样的话,就可以听见神灵的声音。现场产品传来喃喃细语告知我们解决问题的诀窍——这样试试如何?”
准确 从成书过程来看,这本书也找过一些内部的开发人员请他们挑问题使得本书的表达更准确。最后,电子工业出版社的胡辛征老师对本书提出了很多具体而必要的建议,江立老师反复做了细致的修订工作,他们丰富的经验和认真负责的态度使得本书从粗糙的讲稿变成了书本的形式。
感谢 最后笔者衷心感谢家人、关心我的老师和朋友们、创业伙伴、搜索培训班的学员以及选择猎兔搜索软件的客户多年来的支持。第一次开办搜索培训班时,由于讲稿本身准备得不够充分,学员有诸多的反馈意见。经过不断的修改后,新学员的负面反馈越来越少。
他们的意见也在时刻提醒笔者要保持谦虚的态度。猎兔搜索的客户对于完善搜索技术提供了重要的支持,客户公司包括:天下互联公司、北京电视台、港澳资讯公司、三星鹏泰公司、中国自动化网、中国工控网、中国机电贸易网、易车网、敦煌网、G宝盘、消息树网站等。