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.1 Google 神话………………………………………………………………………………………………………..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




评论(0)