乐于分享
好东西不私藏

技术控:自己动手写搜索引擎全流程PDF教程,打造一个属于自己的 Google

技术控:自己动手写搜索引擎全流程PDF教程,打造一个属于自己的 Google

Google 神话


1995 年,两个年轻的学生 Larry Page 和 Sergey Brin 在一点上达成了共识——从大量数
据检索信息是计算系统面临的最大的挑战之一。1996 年,他们创建了一个叫做 BackRub 的
搜索引擎。这个搜索引擎后来叫做 Google。1998 年,Page 和 Brin 在 Larry 的大学宿舍创立
Google 公司的第一个数据中心。2000 年,Google 开始成为全球最大的搜索引擎一直到现在。
2005 年,Google 股票市值超过 1000 亿美元。公司首次登陆华尔街时,“让世界更美好”便
是他们阐明的目标之一。

体验搜索引擎

你想起什么大脑没有记住的知识了吗?用搜索引擎吧。它往往不会让你失望。
事实上这正是 Google 的创始人设想的。“如果你想搜就能搜,几乎像拥有第二个大脑,
那就妙极了,”他说。就在 Brin (一直是两人中站在前台的那个)说在兴头上的时候,Page 在
不声不响地稍稍露面之后,便带着“共谋者般的微笑”溜出了房间。
但是不要感到 Google 已经完成所有的事情,没有什么事情留下来给我们做了。

下面是这本教程目录:

自己动手写搜索引擎…………………………………………………………………………….1

第 1 章 了解搜索引擎……………………………………………………………………………1

1.1Google神话……………………………………………………………….1

1.2 体验搜索引擎………………………………………………………………1

1.3 你也可以做搜索引擎…………………………………………………….4

1.4 本章小结………………………………………………………………….4

第 2 章 遍历搜索引擎技术………………………………………………………………………5

2.1   30 分钟实现的搜索引擎………………………………………………..5

  • 2.1.1 准备工作环境(10 分钟)…………………………………………5
  • 2.1.2 编写代码(15 分钟)………………………………………………6
  • 2.1.3 发布运行(5 分钟)………………………………………………9

2.2 搜索引擎基本技术………………………………………………………..14

  • 2.2.1 网络蜘蛛………………………………………………………………14
  • 2.2.2 全文索引结构…………………………………………………………14
  • 2.2.3 Lucene 全文检索引擎……………………………………………..15
  • 2.2.4 Nutch 网络搜索软件……………………………………………….15
  • 2.2.5 用户界面…………………………………………………………..17

2.3 商业搜索引擎技术介绍………………………………………………….17

  • 2.3.1 通用搜索…………………………………………………………..17
  • 2.3.2 垂直搜索………………………………………………………………18
  • 2.3.3 站内搜索………………………………………………………………19
  • 2.3.4 桌面搜索………………………………………………………………21

2.4 本章小结……………………………………………………………………..21

第 3 章 获得海量数据……………………………………………………………………………22

3.1 自己的网络蜘蛛…………………………………………………………….22

  • 3.1.1 BerkeleyDB 介绍……………………………………………………27
  • 3.1.2 抓取网页………………………………………………………………….28
  • 3.1.3 MP3 抓取…………………………………………………………….29
  • 3.1.4 RSS 抓取……………………………………………………………….30
  • 3.1.5 图片抓取…………………………………………………………………33
  • 3.1.6 垂直行业抓取…………………………………………………………34

3.2 抓取数据库中的内容………………………………………………………36

  • 3.2.1 建立数据视图………………………………………………………….36
  • 3.2.2 JDBC 数据库连接…………………………………………………….36
  • 3.2.3 增量抓取……………………………………………………………….38

3.3 抓取本地硬盘上的文件……………………………………………………38

  • 3.3.1 目录遍历…………………………………………………………………38

3.4 本章小结………………………………………………………………….40

第 4 章 提取文档中的文本内容………………………………………………………………..41

4.1 从 HTML 文件中提取文本 ……………………………………………..41

  • 4.1.1 HtmlParser 介绍……………………………………………………..49
  • 4.1.2 结构化信息提取………………………………………………….52
  • 4.1.3 网页去噪………………………………………………………………….58
  • 4.1.4 网页结构相似度计算…………………………………………………….61
  • 4.1.5 正文提取的工具 FireBug………………………………………………62
  • 4.1.6 正文提取的工具 NekoHTML………………………………………..64
  • 4.1.7 正文提取………………………………………………………………….66

4.2 从非 HTML 文件中提取文本 …………………………………………….77

  • 4.2.1 TEXT 文件……………………………………………………………….77
  • 4.2.2 PDF 文件 ………………………………………………………………….77
  • 4.2.3 Word 文件………………………………………………………………..85
  • 4.2.4 Rtf 文件…………………………………………………………………86
  • 4.2.5 Excel 文件…………………………………………………………..87
  • 4.2.6 PowerPoint 文件…………………………………………………….88

4.3 流媒体内容提取…………………………………………………………….89

  • 4.3.1 音频流内容提取………………………………………………………..89
  • 4.3.2 视频流内容提取…………………………………………………………91

4.4 抓取限制应对方法…………………………………………………………..93

4.5 本章小结……………………………………………………………………….94

第 5 章 自然语言处理…………………………………………………………………………….95

5.1 中文分词处理………………………………………………………………….95

  • 5.1.1 Lucene 中的中文分词……………………………………………….95
  • 5.1.2 Lietu 中文分词的使用 ……………………………………………….96
  • 5.1.3 中文分词的原理………………………………………………………96
  • 5.1.4 查找词典算法………………………………………………………….99
  • 5.1.5 最大概率分词方法………………………………………………..102
  • 5.1.6 新词发现………………………………………………………………..105
  • 5.1.7 隐马尔可夫模型……………………………………………………..106

5.2 语法解析树………………………………………………………………….108

5.3 文档排重……………………………………………………………………..108

5.4 中文关键词提取…………………………………………………………….110

  • 5.4.1 关键词提取的基本方法………………………………………….110
  • 5.4.2 关键词提取的设计……………………………………………….. 111
  • 5.4.3 从网页提取关键词………………………………………………… 111

5.5 相关搜索……………………………………………………………………. 111

5.6 拼写检查………………………………………………………………114

  • 5.6.1 英文拼写检查………………………………………………………….114
  • 5.6.2 中文拼写检查………………………………………………………….115

5.7 自动摘要………………………………………………………………………120

  • 5.7.1 自动摘要技术………………………………………………………….120
  • 5.7.2 自动摘要的设计……………………………………………………….120
  • 5.7.3 Lucene 中的动态摘要………………………………………….128

5.8 自动分类……………………………………………………………………..128

  • 5.8.1 Classifier4J…………………………………………………………….129
  • 5.8.2 自动分类的接口定义………………………………………………….131
  • 5.8.3 自动分类的 SVM 方法实现………………………………………….132
  • 5.8.4 多级分类………………………………………………………………….132

5.9 自动聚类…………………………………………………………………134

  • 5.9.1 聚类的定义…………………………………………………………..134
  • 5.9.2 K 均值聚类方法………………………………………………..135
  • 5.9.3 K 均值实现…………………………………………………………….135

5.10 拼音转换……………………………………………………………………..142

5.11 语义搜索……………………………………………………………………..143

5.12 跨语言搜索………………………………………………………………….147

5.13 本章小结……………………………………………………………………..148

第 6 章 创建索引库……………………………………………………………………………149

6.1 设计索引库结构……………………………………………………………150

  • 6.1.1 理解 Lucene 的索引库结构………………………………………150
  • 6.1.2 设计一个简单的索引库…………………………………………….152

6.2 创建和维护索引库………………………………………………………….153

  • 6.2.1 创建索引库……………………………………………………………153
  • 6.2.2 向索引库中添加索引文档………………………………………….153
  • 6.2.3 删除索引库中的索引文档…………………………………………155
  • 6.2.4 更新索引库中的索引文档…………………………………………155
  • 6.2.5 索引的合并…………………………………………………………….155
  • 6.2.6 索引的定时更新………………………………………………156
  • 6.2.7 索引的备份和恢复………………………………………………157
  • 6.2.8 修复索引……………………………………………………158

6.3 读写并发控制………………………………………………………….158

6.4 优化使用 Lucene………………………………………………………159

  • 6.4.1 索引优化…………………………………………………….159
  • 6.4.2 查询优化…………………………………………………………..161
  • 6.4.3 实现时间加权排序……………………………………………….166
  • 6.4.4 实现字词混合索引…………………………………………….167
  • 6.4.5 定制 Similarity………………………………………………..173
  • 6.4.6 定制 Tokenizer………………………………………………..174

6.5 查询大容量索引………………………………………………………….176

6.6 本章小结…………………………………………………………………..177

第 7 章 用户界面设计与实现…………………………………………………………………177

7.1 Lucene 搜索接口(search 代码)……………………………………..178

7.2 搜索页面设计……………………………………………………179

  • 7.2.1 用于显示搜索结果的 taglib………………………………….179
  • 7.2.2 用于搜索结果分页的 taglib……………………………………181
  • 7.2.3 设计一个简单的搜索页面………………………………………..183

7.3 实现搜索接口………………………………………………………..186

  • 7.3.1 布尔搜索………………………………………………………….186
  • 7.3.2 指定范围搜索……………………………………………….186
  • 7.3.3 设置过滤条件……………………………….错误!未定义书签
  • 7.3.4 搜索结果排序…………………………………………………191
  • 7.3.5 搜索页面的索引缓存与更新………………………………..192

7.4 实现关键词高亮显示……………………………………………194

7.5 实现多维视图………………………………………………..196

7.6 实现相似文档搜索…………………………………………………….202

7.7 实现 AJAX 自动完成 ………………………………………………….205

  • 7.7.1 总体结构………………………………………………….206
  • 7.7.2 服务器端处理……………………………………………….206
  • 7.7.3 浏览器端处理………………………………………………..208
  • 7.7.4 服务器端改进………………………………………………..209
  • 7.7.5 部署总结………………………………………………………….219

7.8 jQuery 实现的自动完成…………………………………………….219

7.9 集成其他功能……………………………………………………….225

  • 7.9.1 拼写检查………………………………………………………..225
  • 7.9.2 分类统计…………………………………………………..226
  • 7.9.3 相关搜索………………………………………….226
  • 7.9.4 再次查找……………………………………………………….229
  • 7.9.5 搜索日志………………………………………………………..229

7.10 搜索日志分析………………………………………………………231

7.11 本章小结……………………………………………………………….234

第 8 章 其他高级主题…………………………………………………………………………238

8.1 使用 Solr 实现分布式搜索…………………………………………..235

  • 8.1.1 Solr 服务器端的配置与中文支持………………………..235
  • 8.1.2 把数据放进 Solr……………………………………………….240
  • 8.1.3 删除数据…………………………………………………………243
  • 8.1.4 客户端搜索界面………………………………………………..244
  • 8.1.5 Solr 索引库的查找………………………………………………245
  • 8.1.6 索引分发……………………………………………………….249
  • 8.1.7 Solr 搜索优化……………………………………………………..249
  • 8.1.8 Solr 中字词混合索引…………………………………………..252
  • 8.1.9 相关检索………………………………………………………….256
  • 8.1.10 搜索结果去重…………………………………………………..258
  • 8.1.11 分布式搜索………………………………………………………263
  • 8.1.12 SolrJ 查询分析器………………………………………………..267
  • 8.1.13 扩展 SolrJ ………………………………………………………….279
  • 8.1.14 扩展 Solr…………………………………………………………280
  • 8.1.15 Solr 的.net 客户端……………………………………………288
  • 8.1.16 Solr 的 php 客户端……………………………………….289

8.2 图片搜索……………………………………………………………….294

  • 8.2.1 图像的 OCR 识别……………………………………………….295

8.3 竞价排名…………………………………………………………………299

8.4 Web 图分析 ……………………………………………………………300

8.5 使用并行程序分析数据……………………………………………305

8.6 RSS 搜索 …………………………………………………………………..306

8.7 本章小结……………………………………………………………….307

参考资源……………………………………………………………….308

  • 书籍…………………………………………………………………………308
  • 网址…………………………………………………………………………….308

本书中的章节和代码对照表309

PDF教程,有兴趣的学习的点击下方左下角“阅读原文“下载