第1章 搜索的相关性问题 1
1.1 我们的目标:掌握相关性技术研发的技能 2
1.2 为什么搜索的相关性如此之难 3
1.2.1 什么是具备“相关性”的搜索结果 4
1.2.2 搜索:没有银弹 6
1.3 来自相关性研究的启示 7
1.3.1 信息检索 7
1.3.2 能否利用信息检索解决相关性问题 9
1.4 如何解决相关性 11
1.5 不只是技术:管理、协作与反馈 13
1.6 本章小结 16
第2章 搜索——幕后揭秘 17
2.1 搜索101 18
2.1.1 什么是搜索文档 19
2.1.2 对内容进行搜索 19
2.1.3 通过搜索来探索内容 21
2.1.4 获取进入搜索引擎的内容 21
2.2 搜索引擎的数据结构 23
2.2.1 倒排索引 23
2.2.2 倒排索引的其他内容 25
2.3 对内容进行索引:提取、充实、分析和索引 26
2.3.1 将内容提取为文档 28
2.3.2 充实文档以清理、强化与合并数据 28
2.3.3 执行分析 29
2.3.4 索引 33
2.4 文档的搜索和获取 34
2.4.1 布尔搜索:AND/OR/NOT 34
2.4.2 基于Lucene搜索的布尔查询(MUST/MUST_NOT/SHOULD) 36
2.4.3 位置和短语匹配 37
2.4.4 助力用户浏览:过滤、切面和聚合 38
2.4.5 排序、结果排名,以及相关性 39
2.5 本章小结 42
第3章 调试我们的第一个相关性问题 43
3.1 Solr和Elasticsearch的应用:基于Elasticsearch的例子 44
3.2 最了不起的数据集:TMDB 45
3.3 用Python语言编写的例子 46
3.4 第一个搜索应用 46
3.4.1 针对TMDB Elasticsearch索引的第一次搜索 49
3.5 调试查询匹配 52
3.5.1 检查底层查询策略 53
3.5.2 剖析查询解析 54
3.5.3 调试分析,解决匹配问题 55
3.5.4 比较查询条件和倒排索引 58
3.5.5 通过修改分析器来修正我们的匹配 59
3.6 调试排名 62
3.6.1 利用Lucene的解释功能来剖析相关性评价 63
3.6.2 向量空间模型、相关性解释信息和我们 68
3.6.3 向量空间模型在实践中的注意事项 71
3.6.4 通过对匹配的评价来度量相关性 72
3.6.5 用TF×IDF计算权重 74
3.6.6 谎言、该死的谎言和相似度 75
3.6.7 决定搜索词重要性的因素 77
3.6.8 解决Space Jam和alien的排名问题 78
3.7 问题解决了?工作永远做不完! 80
3.8 本章小结 81
第4章 驾驭token 83
4.1 将token作为文档特征 84
4.1.1 匹配的流程 85
4.1.2 token,不只是单词 85
4.2 控制查准率和查全率 86
4.2.1 查准率和查全率的例子 86
4.2.2 查准率或查全率的分析 89
4.2.3 一味提高查全率 93
4.3 查准率和查全率——让鱼和熊掌兼得 95
4.3.1 评价单一字段中特征的强度 95
4.3.2 超越TF×IDF的评价:多搜索词与多字段 99
4.4 分析策略 100
4.4.1 处理分隔符 100
4.4.2 捕获同义词的语义 103
4.4.3 在搜索中为专指性建模 107
4.4.4 利用同义词为专指性建模 107
4.4.5 利用路径为专指性建模 110
4.4.6 对整个世界分词 112
4.4.7 对整数分词 112
4.4.8 对地理数据分词 113
4.4.9 对歌曲分词 115
4.5 本章小结 118
第5章 多字段搜索基础 119
5.1 信号及信号建模 121
5.1.1 什么是信号 121
5.1.2 从源数据模型开始 122
5.1.3 实现信号 125
5.1.4 信号建模:为数据的相关性建模 126
5.2 TMDB——搜索,人类最后的边疆 127
5.2.1 违反基本法则 129
5.2.2 让嵌套文档扁平化 129
5.3 在以字段为中心的搜索中给信号建模 132
5.3.1 从best_fields开始 136
5.3.2 控制搜索结果中的字段偏好 139
5.3.3 可以使用信号更精准的best_fields吗 141
5.3.4 让失败者分享荣耀:为best_fields校准 144
5.3.5 利用most_fields统计多个信号 147
5.3.6 在most_fields中缩放信号 149
5.3.7 什么时候其他匹配才无关紧要 151
5.3.8 有关most_fields的结论是什么 152
5.4 本章小结 153
第6章 以词为中心的搜索 154
6.1 什么是以词为中心的搜索 155
6.2 我们为什么需要以词为中心的搜索 157
6.2.1 猎寻“白化象” 157
6.2.2 在“星际迷航”的例子中寻找白化象问题 160
6.2.3 避免信号冲突 162
6.2.4 理解信号冲突的机理 163
6.3 完成第一个以词为中心的搜索 165
6.3.1 使用以词为中心的排名函数 166
6.3.2 运行以词为中心的查询解析器(深入底层) 169
6.3.3 理解字段同步 170
6.3.4 字段同步和信号建模 171
6.3.5 查询解析器和信号冲突 172
6.3.6 对以词为中心的搜索进行调优 174
6.4 在以词为中心的搜索中解决信号冲突 176
6.4.1 将字段合并成自定义全字段 177
6.4.2 利用cross_fields解决信号冲突 181
6.5 结合以字段为中心和以词为中心的策略:鱼与熊掌兼得 183
6.5.1 将“相似字段”分到一组 183
6.5.2 理解相似字段的局限 185
6.5.3 将贪婪的简单搜索和保守的放大器结合起来 186
6.5.4 以词为中心与以字段为中心,查准率与查全率 189
6.5.5 考虑过滤、放大,以及重新排名 190
6.6 本章小结 190
第7章 调整相关性函数 192
7.1 何谓评价调整 193
7.2 放大:通过突出结果来实现调整 195
7.2.1 放大:最后的边疆 195
7.2.2 放大时——选择加法运算还是乘法运算,布尔查询还是函数查询? 197
7.2.3 选择第一扇门:利用布尔查询进行加法放大 199
7.2.4 选择第二扇门:利用数学运算进行排名的函数查询 202
7.2.5 函数查询实践:简单的乘法放大 204
7.2.6 放大处理的基础:信号,处处是信号 206
7.3 过滤:通过排除的方法对结果进行调整 206
7.4 满足业务需求的评价调整策略 208
7.4.1 搜索所有影片 209
7.4.2 对放大信号进行建模 211
7.4.3 构造排名函数:增加具有较高价值的层级 215
7.4.4 利用函数查询对具有较高价值的层级进行评价 219
7.4.5 忽略TF×IDF 221
7.4.6 捕捉综合质量指标 222
7.4.7 达成用户的时效性目标 224
7.4.8 结合函数查询 227
7.4.9 把一切联系起来 230
7.5 本章小结 230
第8章 提供相关性反馈 232
8.1 搜索框中的相关性反馈 234
8.1.1 利用“即输即搜”提供即时结果 234
8.1.2 利用“搜索补全”帮助用户找到最佳查询 236
8.1.3 利用搜索建议来修正输入和拼写错误 244
8.2 浏览期间的相关性反馈 247
8.2.1 构建基于切面的浏览 249
8.2.2 提供面包线导航 251
8.2.3 选择其他的结果排序方式 252
8.3 搜索结果清单中的相关性反馈 253
8.3.1 什么信息应该出现在搜索结果中 254
8.3.2 通过文本片段与高亮提供相关性反馈 255
8.3.3 对相似文档分组 259
8.3.4 在用户搜不到结果时给予帮助 261
8.4 本章小结 262
第9章 设计以相关性为核心的搜索应用 263
9.1 Yowl!一个绝佳的新起点 264
9.2 信息和需求的收集 265
9.2.1 理解用户及其信息需求 265
9.2.2 理解业务需求 267
9.2.3 找出必要及可用的信息 268
9.3 搜索应用的设计 269
9.3.1 将用户体验可视化 270
9.3.2 定义字段和模型的信号 273
9.3.3 信号的组合与平衡 274
9.4 部署、监控和改进 286
9.4.1 监控 286
9.4.2 找出问题并解决它们 288
9.5 知道什么是恰到好处 289
9.6 本章小结 290
第10章 以相关性为核心的企业 292
10.1 反馈:以相关性为核心的企业所依赖的基石 294
10.2 为什么以用户为中心的文化比数据驱动的文化更重要 296
10.3 无视相关性的天马行空 299
10.4 相关性反馈的觉醒:领域专家和专业用户 301
10.5 相关性反馈的成长:内容管理 303
10.5.1 内容管理员的角色 304
10.5.2 与内容管理员缺乏交流的风险 306
10.6 让相关性更加流畅:工程师/内容管理员的结对 307
10.7 让相关性加速:测试驱动的相关性 309
10.7.1 理解测试驱动的相关性 309
10.7.2 使用带用户行为数据的测试驱动相关性 312
10.8 超越测试驱动的相关性:学习排序 313
10.9 本章小结 315
第11章 语义和个性化搜索 316
11.1 基于用户概况的个性化搜索 318
11.1.1 收集用户的概况信息 319
11.1.2 将概要信息与文档索引紧密关联 319
11.2 基于用户行为的个性化搜索 320
11.2.1 引入协同过滤 321
11.2.2 使用共现计数的基本协同过滤算法 322
11.2.3 将用户行为信息与文档索引紧密关联 327
11.3 构建概念性搜索的基本方法 332
11.3.1 构建概念性信号 333
11.3.2 利用同义词对内容进行扩充 334
11.4 利用机器学习来构建概念性搜索 336
11.4.1 概念性搜索中短语的重要性 338
11.5 连接个性化搜索与概念性搜索 338
11.6 推荐是一种广义的搜索 339
11.6.1 用推荐代替搜索 341
11.7 祝愿大家有一个美好的相关性搜索之旅 342
11.8 本章小结 343
附录A 直接根据TMDB建立索引 344
附录B Solr读者指南 351