说说搜索引擎
搜索引擎这几年热起来了。
作为世界上最大、最出名的搜索引擎,Google在很多方面都发挥了重要的作用。
但是,当手中没有Google的搜索代码时,该如何搭建一个自己的搜索引擎呢?业界的人士说,全新开发一套完备的企业级搜索引擎要五年的时间。诚然,许多“业界”人士的话并不可信,不过,在搜索引擎这一块,真想要做好确实不容易。
开发搜索引擎耗费大量的时间和精力,所以有一些人开始研发独立的搜索引擎模块,并将其源代码开放,这样就可以给其他需要建立自己的搜索引擎的人提供一个基础平台。在这些开源搜索引擎模块的基础上做开发,可以节约非常多的时间和精力,大大减少了开发成本,缩短了产品投入市场的周期。而且,由于这些平台是开源的,可以亲自检查每一行代码,修改算法和显示格式等内容,这样的搜索引擎就相当于自己写的,用起来放心。
有时使用某些商业搜索模块,尽管搜索效果也很好,但是很难知道在单击“搜索”按钮的瞬间自己是否做了一些自己并不想做的事情,比如:给某个陌生人发送了一个特洛伊木马。
写这本书的动机
开源搜索引擎,对解决企业搜索等问题提供了可靠的二次开发平台(有的甚至不需要二次开发),大大提高了开发搜索引擎的效率,缩减了成本,好处多多。所以,需要有一些书来介绍如何使用开源搜索模块来提供搜索服务,而目前市面上这类书籍并不多。
我写了几本书,从搜索引擎的原理开始,讲解基于数据库的搜索引擎、基于文件系统的搜索引擎,内容覆盖各种主流的数据库(如Oracle,SQL Server,MySQL)提供的全文搜索机制到各种开源搜索引擎(如Lucene,DotLucene,Nutch,Hyper Estraier)实现的网络搜索平台所需的一切核心知识。当然,其中也不乏分词原理、搜索算法、Spider抓取网页以及对各种不同格式文件(如HTML,Word,PDF等)的解析等知识。
实事求是地讲,做搜索引擎是一个门槛较高的行业,不是普通的程序员轻易就可以做的。
但有了这几本书,即便是普通的程序员也可以轻松地搭建起自己的搜索引擎了。
这本书的特点
本书的内容以实践为主,并不深挖理论。用石志国博士的话来讲,就是“理论联系实际,并有所发展”。这是他写书的特点,同样适用于我。
这几本书中包含了必要的理论,但以实践为主。所讲的理论都不是纸上谈兵,而是可以立即付诸实践进行工程应用的。代码可以直接拿出来用(只是不要忘了输入信息验证等基本的安全检查),构建出搜索引擎。
书中含有大量的案例,由浅入深。浅,并不从“什么是程序设计”开始,所以读者需要具备一些编程的基础知识才能看懂。深,并没有深到“只可意会,无法言传”的地步,所以读者不需要担心无法看懂。
选择本书的理由
我始终认为翻译别人的书容易,只要照实翻就行。可是自己写书就不是很容易,一定要写有用的书,写好书。以下几点可以成为你看这本书的理由。
第一,搜索引擎很热,构建搜索引擎很有用。这本书可以使读者轻松掌握搭建搜索引擎平台所需的核心知识,并能轻松搭建起自己的搜索引擎平台。
第二,这本书讲解详细,书中涉及的代码全部提供。使用这些代码,即使不进行修改,也可以建立起一个中型的搜索平台了。
第三,网上有些文档,多半是英文的,还有其他国家语言的。对于外文不太好的读者来说,理解起来难免有误差和困难。这本书,至少比直接翻译外国文档要强一些,看起来会轻松些。
第四,即便网上所有的文档都不是外文的,而是中文的,我依然认为买一本书来看比在网上浏览要好得多。人要爱护眼睛,软件工程师尤其是这样。
这本书的内容和编写思路
这本书共包括7章,可以分成三个部分。介绍了搜索引擎相关的核心知识。
第一部分(第1章):搜索引擎概论。介绍搜索引擎的历史及当前的发展状况,与搜索引擎相关的公司、技术,以及搜索引擎对人类生活的影响。
第二部分(第2章):搜索引擎的原理和相关技术。介绍搜索引擎的基本构造方法,实现索引建立和搜索的基本算法。
第三部分(第3~7章):基于数据库的全文搜索。介绍通常采用数据库的全文索引服务时搜索引擎的基本搭建方式。对于Windows索引服务,专门稍微细致地讲了一些。
这本书从当前搜索引擎市场的形势分析开始,陆续地介绍了与开发搜索引擎相关的理论和技术,这是为了使读者对搜索引擎有完全的认识,从整体上把握搜索引擎行业的走势及相关的技术情况,如果读者希望自己创立一个搜索引擎的公司或者在搜索行业有大作为,那么,这部分知识是必不可少的。
之后,介绍了常规的数据库搜索引擎的实现原理,这部分知识非常简单,大部分人对它都很熟悉。所以只做了简单的回顾,没有细致介绍。然而这部分知识又是需要的,它可以作为初级读者对搜索的新接触,也可以作为中级读者学习全文搜索引擎的过渡。介绍了这部分知识之后,再介绍主流数据库的全文索引服务和全文搜索支持就不会显得唐突了。
本书的最后介绍了目前世界上应用最广的三种数据库(Oracle,SQL Server,MySQL)提供的全文索引服务,并且介绍了有效的案例来实现应用程序层面的全文搜索模块。使用这些技术(只需在案例基础上修改)就可以轻松地搭建起企业搜索引擎。
另外,考虑到Windows的用户较多,专门介绍了Windows索引服务,在某些情况下,它是解决企业搜索的有效途径。
这样,通过这些知识的讲解,有关搜索引擎的理论、技术入门及基于数据库的全文搜索策略就阐述清楚了。对于想要涉足搜索行业的软件开发人员来说,这些知识足以将其领入门并使其可以向前走一段路。
但是,如果读者想要再向前走一步,建议看看本书的兄弟篇《迅速搭建全文搜索平台——开源搜索引擎实战教程》。兄弟篇介绍了Lucene,Lucene.net,DotLucene(现已更名为Lucene.net),Lemur,Nutch,Hyper Estraier等高性能的开源搜索引擎的原理和架设方法以及抓取网页,分词处理、中文支持等相关内容。
谅解和支持本书从章节的安排到案例的编写,都经过了仔细揣摩,力图做到最好。然而,没有最好,只有更好。
本书尽力做到精练,且没有附加光盘以减少读者的购书成本。本书的所有源代码都放在出版社的网站上(http://press.bjtu.edu.cn),读者可以免费下载。
在这本书中发现任何问题,皆望能与我联系,以使本书臻于完善。我的E-mail:yutianen@163.com。
衷心感谢在我的成长过程中,得到过许多人的关心和鼓舞,他们启迪了我的思维,拓宽了我的视野,如果人生是在沙漠中旅行,他们就是眼前的足印和身上的水。
在本书的写作过程中,得到了许多人的支持和鼓励,他们是:哈尔滨工业大学语音处理研究室的李海峰老师,校部机关的蔡德彰、李新美、曲洪勤、黄峰、冯健、孔祥钰等老师,热能动力工程研究所的周逊老师,传统工业基地转型研究所的陈晓东老师,软件学院的田英鑫老师,网络与信息中心的杨庆海、何慧、李亚平、王宇航等老师,研究生院的彭远奎、朱群益、张思琦、王晓磊、雷稚蔷等老师,计时器研究所的王晓溪老师、图书馆的耿小兵老师,外国语学院的王桂芝、常巍(Sabrina)等老师,机器人研究所的蔡鹤皋院士,控制理论与制导技术研究中心的段广仁、尹航、周彬老师、科学园的宋斌、刘弋滢等老师,计算机学院的刘开昌老师,等等。
他们都是我的良师益友,是我心中的动力,每当想到他们,我总觉得自己应该放弃休息,去做更多有益的事,将真诚与善良传递下去。
在这里,对他们表示衷心的感谢!
同时,对哈工大天萌联合的一切成员表示感谢!那些曾跟我在一起的朋友,我会记得你们为我泡的每一杯咖啡和茶。那些始终保持独立的朋友,我也祝愿你们会有更加辉煌的未来。
天萌联合永远是哈工大最强、最自由的社团,你们这些天萌的元老的名字,将永远铭刻在哈工大的历史上,铭刻在我的心里。
另外,需要特别感谢:
石志国博士,他的《ASP精解案例教程》一书是我学习编程的开端。他是个高尚的人。这本书定名为“精解案例教程”就是表达对他的敬意。
顾倩萌。让我又怜又爱,时刻挂心。她的爱是股特殊的强大力量,让我找回记忆、重新开始唱歌、安静、宁神。她是我最爱的小月,是我唯一的轻松和仅存的快乐。没有小月,生命不该开始。没有小月,一切都没有意义。
于天恩
2007年7月
哈工大
天人居