第1章 引言 1
1.1 搜索引擎概述 2
1.1.1 目录式搜索引擎 2
1.1.2 全文搜索引擎 3
1.1.3 元搜索引擎(Meta-Search Engine) 3
1.2 搜索引擎的主要需求 3
1.2.1 快 4
1.2.2 全 4
1.2.3 准 4
1.2.4 稳 5
1.2.5 省 5
1.3 搜索引擎的4大系统 6
1.3.1 搜索引擎的体系结构 6
第2章 搜索引擎的下载系统 8
2.1 爬虫的发展历史 9
2.1.1 世界上第1个爬虫 9
2.1.2 爬虫的发展历程 9
2.2 万维网及其网页分析 9
2.2.1 蝴蝶结型的万维网 10
2.2.2 万维网的直径 12
2.2.3 万维网的规模及变化特征 12
2.2.4 网页的特征 13
2.3 有关爬虫的基本概念 13
2.3.1 爬虫 13
2.3.2 种子站点 14
2.3.3 URL 14
2.3.4 Backlinks 14
2.4 网页抓取原理 14
2.4.1 telnet和wget 14
2.4.2 从种子站点开始逐层抓取 15
2.4.3 不重复抓取策略 19
2.4.4 网页抓取优先策略 25
2.4.5 网页重访策略 26
2.4.6 Robots协议 30
2.4.7 其他应该注意的礼貌性问题 31
2.4.8 重要性网页优先抓取策略 32
2.4.9 抓取提速策略(合作抓取策略) 34
2.5 网页库 38
2.6 下载系统回顾及未来发展 41
参考文献 42
第3章 搜索引擎的分析系统 44
3.1 知识准备 45
3.1.1 HTML语言 45
3.1.2 锚文本(anchor text) 45
3.1.3 半结构化数据(semi-structured data) 45
3.2 信息抽取及网页信息结构化 45
3.2.1 网页结构化的目标 46
3.2.2 建立HTML标签树 48
3.2.3 通过投票方法得到正文 52
3.2.4 网页结构化过程回顾 55
3.3 网页查重 56
3.3.1 网页查重技术发展历史 56
3.3.2 网页查重实现方法 58
3.4 中文分词 61
3.4.1 什么是中文分词 61
3.4.2 通过字典实现分词 61
3.4.3 基于统计的分词方法 65
3.5 PageRank 67
3.5.1 PageRank的来由 68
3.5.2 PageRank的基本想法 68
3.5.3 PageRank的计算公式 69
3.5.4 PageRank的计算方法 73
3.6 分析系统结构图 76
参考文献 77
第4章 搜索引擎的索引系统 79
4.1 知识准备 80
4.1.1 信息 80
4.1.2 索引 80
4.1.3 倒排索引、倒排表、临时倒排文件、最终倒排文件 80
4.1.4 其他概念 81
4.2 全文检索 81
4.3 文档编号 82
4.3.1 编号的本质 82
4.3.2 文档编号的方法 83
4.3.3 游程编码 84
4.4 倒排索引 87
4.4.1 经典的倒排索引 87
4.4.2 正排索引(前向索引) 88
4.4.3 倒排索引 90
4.5 数据规模的估计 92
4.5.1 齐普夫法则 92
4.5.2 布尔检索模型下的索引规模估计 94
4.6 涉及存储规模的一些计算 97
4.6.1 正排表与倒排表的合并 97
4.6.2 多个临时倒排文件的归并 100
4.6.3 倒排索引分布式存储 103
4.6.4 倒排文件缓存 106
4.6.5 倒排索引词典统计信息的计算 106
4.7 倒排索引文件的创建过程 107
4.7.1 创建倒排表 107
4.7.2 计算统计信息 109
参考文献 110
第5章 搜索引擎的查询系统 112
5.1 知识准备 113
5.1.1 什么是信息熵 113
5.1.2 检索和查询的区别 115
5.1.3 检索词和查询词的区别 115
5.1.4 自动文本摘要(Automatic Text Summarization) 116
5.2 网页信息检索 116
5.2.1 早期的检索模型 116
5.2.2 向量空间模型(Vector Space Models) 118
5.2.3 关键词权重的量化方法TF/IDF 122
5.2.4 搜索引擎采用的检索模型 125
5.2.5 多文档列表求交计算 127
5.2.6 检索结果排序 132
5.2.7 堆排序 132
5.3 中文自动摘要 137
5.3.1 自动摘要的发展历史 137
5.3.2 自动摘要的含义和实现 137
5.4 生成搜索结果页 142
5.4.1 生成搜索结果页 142
5.5 搜索结果页的缓存 144
5.6 推测用户查询意图 145
5.6.1 查询分类 146
5.6.2 推测信息类、事物类的查询意图 147
5.7 查询系统的当前热点和发展方向 147
5.7.1 查询系统的当前热点 148
5.7.2 查询系统的发展方向 148
参考文献 149
第6章 搜索引擎日志分析 150
6.1 简介 151
6.1.1 人机交互的记录——日志 151
6.1.2 分析搜索引擎日志的意义 153
6.1.3 本章的主要内容 154
6.2 知识准备 155
6.2.1 二分图模型(Bipartite Model) 155
6.2.2 图模型(graphical model) 156
6.2.3 LDA(Latent Dirichlet Allocation)模型 158
6.2.4 随机游走(Random Walk) 159
6.2.5 小结 160
6.3 查询日志分析 161
6.3.1 查询日志的内容 161
6.3.2 查询词频统计 162
6.3.3 查询词提示(Suggestion) 163
6.3.4 命名实体(Named Entity)类别识别 165
6.3.5 小结 167
6.4 点击日志分析 167
6.4.1 点击日志的内容 168
6.4.2 查询串提示(Suggestion)再分析 169
6.4.3 查询和结果类别属性传递 170
6.4.4 搜索结果相似性度量 171
6.4.5 查询结果排序 172
6.4.6 点击数据的稀疏性 174
6.4.7 小结 176
6.5 隐私问题 177
6.5.1 日志的两面性 177
6.5.2 日志的安全使用 179
6.5.3 小结 179
6.6 本章总结 180
参考文献 180
第7章 排序学习(Learning to Rank) 183
7.1 排序概述 184
7.2 传统的排序模型 186
7.2.1 查询相关的排序模型 186
7.2.2 查询无关的排序模型 188
7.3 排序学习简介以及研究现状 190
7.3.1 排序学习简介 190
7.3.2 排序学习问题的研究现状 191
7.4 排序学习模型的应用实例 192
7.5 排序学习方法的框架 194
7.5.1 参数设置 194
7.5.2 排序学习方法的框架 195
7.6 评测数据集 196
7.6.1 LETOR数据集 196
7.6.2 Microsoft Learning to Rank数据集 197
7.6.3 Yahoo Webscope数据集 198
7.7 排序学习模型简介 198
7.7.1 实例 199
7.7.2 Pointwise方法 199
7.7.3 Pairwise方法 204
7.7.4 Listwise方法 207
7.7.5 3种排序方法的对比 210
7.8 排序学习模型性能比较 211
7.8.1 评测方法 211
7.8.2 排序模型性能的比较 215
7.9 排序学习的研究方向 217
7.9.1 标准标注的自动构建 217
7.9.2 排序特征 217
7.9.3 半监督学习/主动学习 218
7.9.4 查询相关的排序模型 218
7.9.5 利用用户行为特征 218
7.10 总结 219
参考文献 219
第8章 搜索引擎的性能调优 223
8.1 系统调优概述 224
8.2 瓶颈识别 225
8.3 涉及CPU的优化方法 226
8.3.1 上下文切换问题(context switching) 227
8.3.2 中断和轮询 228
8.3.3 CPU的Affinity问题 229
8.3.4 流水线问题 229
8.4 涉及内存的优化方法 235
8.4.1 概述 235
8.4.2 对换区 236
8.4.3 cache line 240
8.4.4 false sharing问题 245
8.4.5 内存的锁问题 247
8.4.6 内存库的使用 257
8.5 涉及磁盘的优化方法 262
8.5.1 磁盘10的调度 262
8.5.2 其他常见磁盘参数调优 264
8.5.3 磁盘读写方式 265
8.5.4 文件缓存问题 267
8.5.5 5分钟法则 269
8.6 涉及网络的优化方法 271
8.6.1 搜索首页,结果页提速方法 271
8.6.2 Web Server的架构选择 274
参考文献 284