《自制搜索引擎》聚焦于Google和Yahoo!等Web搜索服务幕后的搜索引擎系统,首先讲解了搜索引擎的基础知识和原理,接着以现实中的开源搜索引擎Senna/Groonga为示例,使用该引擎的源代码引导读者亲自体验搜索引擎的开发过程。这部分讲解涉及了倒排索引的制作和压缩、检索的处理流程以及搜索引擎的优化等内容。又简单介绍了一些更加专业的搜索引擎的知识和要点,为读者今后进一步学习打下了基础。本书适合所有对搜索引擎感兴趣的技术人员阅读。
第1章 搜索引擎是如何工作的1
1-1 理解搜索引擎的构成3
什么是搜索引擎3
构成搜索引擎的组件4
与搜索引擎相关的组件5
1-2 实现了快速全文搜索的索引结构7
全文搜索的两种方法7
倒排索引的结构8
倒排索引的构建方法9
倒排索引中的术语10
1-3 深入理解倒排索引12
倒排索引=词典+倒排文件12
从倒排索引中查找单词13
将单词的位置信息加入倒排文件中13
从倒排索引中查找短语14
1-4 制作中文文档的倒排索引16
分割中文句子的方法16
权衡分割方法17
1-5 实现倒排索引19
实现词典19
实现倒排文件22
1-6 使用倒排索引进行检索24
布尔检索24
使用倒排索引的检索处理流程24
关联度的计算方法26
信息检索中的检索27
1-7 构建倒排索引29
使用内存构建倒排索引29
使用二级存储构建倒排索引29
静态索引构建和动态索引构建32
1-8 准备要检索的文档34
收集数据34
数据规范化35
第2章 准备全文搜索引擎的检索样本37
2-1 全文搜索引擎wiser39
wiser的构成39
准备用于检索的文档40
2-2 安装wiser42
构建wiser42
启动wiser43
解压缩Wikipedia的副本44
2-3 运行wiser45
构建倒排索引45
使用倒排索引查询46
比较grep和wiser的运行速度46
第3章 构建倒排索引49
3-1 复习有关倒排索引的知识51
提取词元51
为每个词元创建倒排列表53
3-2 构建倒排索引54
在存储器上创建倒排列表54
倒排列表和倒排文件的数据结构54
从源代码级别梳理倒排索引的构建顺序56
进一步阅读源代码59
专栏 根据实际情况设计搜索引擎(系统)68
第4章 开始检索吧71
4-1 检索处理的大致流程73
充分理解检索处理的流程73
4-2 使用倒排索引进行检索75
从源代码级别梳理检索处理的流程75
解读split_query_to_tokens()函数的具体实现76
使用具体示例加深对检索处理流程的理解77
解读函数search_docs()的实现细节80
解读函数search_phrase()的实现84
专栏 如何实现标签检索88
第5章 压缩倒排索引89
5-1 压缩的基础知识90
压缩倒排索引的好处90
专栏 压缩的目的90
倒排索引的压缩方法91
倒排文件的压缩方法91
压缩的原理94
5-2 实现wiser中的压缩功能97
压缩功能源代码的概要97
了解无需进行压缩时的操作99
抓住Golomb编码的要点101
解读Golomb编码中的编码处理105
解读Golomb编码的解码处理108
第6章 挑战wiser的优化及参数的调整113
6-1 提高检索处理的效率115
优化检索处理115
将查询分割为无重复部分的词元序列116
6-2 禁用短语检索119
分析对2字符的字符串进行检索时的行为119
分析对3字符的字符串进行检索时的行为120
6-3 改变检索结果的输出顺序122
作为检索结果排序核心的指标122
按照文档大小降序排列的检索结果124
专栏 排名欺诈128
6-4 让1个字符的查询也能检索出结果29
获取以特定字符开头的词元的列表129
合并检索到的结果131
专栏 如何实现相似文档的检索131
6-5 调整控制倒排索引更新的缓冲区容量133
确认由缓冲区容量的差异带来的不同效果133
用sar命令分析负载134
6-6 调整只有英文字母的词元的分割方法135
如何避免用英文单词检索时准确率下降的问题135
如何判断某字符是否属于索引对象135
修改负责分割词元的函数136
6-7 确认压缩的效果138
观察Golomb编码的效果138
对比压缩启用前后的索引大小138
专栏 避免滥用全文搜索引擎139
第7章 为今后更加深入的学习做准备141
7-1 wiser没能实现的功能143
倒排索引之外的全文搜索索引143
高效处理大规模数据的存储器143
利用缓存提高检索的速度143
使用各种各样的压缩方法144
优化搜索结果的排名144
调整准确率和召回率145
降低检索结果排序处理的负载147
并行处理147
结合对属性的筛选过滤148
分面搜索148
专栏 时延和吞吐量149
7-2 全文搜索引擎Groonga的特点150
通过词元的部分一致检索提升召回率150
使用内存映射文件151
片段152
专栏 宣传活动的重要性152
7-3 实现出考虑到用户意图的搜索引擎153
引入停用词153
应对词素解析的错误153
专栏 断句错误154
处理全角字符和半角字符155
对查询进行归一化156
留意布尔检索的解析过程156
通过词素解析器适当地解析查询157
对错误的输入进行修正157
输入补全158
建议用户检索相关的关键词159
7-4 收集、提取文档时的要点160
制作爬虫时的处理要点160
在提取文本时需要处理的要点163
Appendix 附录165
A-1 深度话题 166
近几年的压缩方法166
动态索引构建169
分布式索引174
A-2 wiser中的文本提取和存储178
用于处理XML的2 种API——DOM和SAX178
提取文档的标题和正文179
掌握状态的迁移182
构建文档数据库187
后记191
《Arduino创意机器人入门》内容简介:机器人教育融机械、传感与控制等内容为一体,让学生在手脑并用解决实际问题的过程中,有效地提
《设计思维:有效的设计沟通和创意策略》旨在介绍设计思维的概况.包括设计进程的每一个阶段:设计师在产生和完善构思时,主要考虑
《办一场属于自己的婚礼:婚礼筹备完整指南》内容简介:这是一本婚礼收藏级宝书。作者深耕婚礼行业8年,在本书中,将自己个人备婚经
《基于网络众包机制的企业创新模式研究》内容简介:技术创新作为保持和增强企业竞争力的重要核心因素,已成为引领企业高速持续发展
网格是所有设计的基础,对设计师来说,学会运用网格是进行所有设计的基础。运用从一栏到多栏网格,与文字、色彩、图像及其他诸多
《经济思想史的可能谱系》内容简介:本书选入了作者的经济思想史学术论文21篇,编为四辑。辑一是方法论阐述,讨论了经济思想史的内
《深入浅出:.NET框架设计与实现》内容简介:本书主要介绍.NET框架的核心部分,不仅阐述了框架的核心设计,还展示了实践代码和运行
单片机原理及应用(第二版)普通高等教育十一五国家级规划教材 内容简介 简介本书为普通高等教育“十一五”国家级规划教材(高职高专教育)。全书共分为五章,主要内容包...
《给孩子的24堂经典阅读课》内容简介:真正的好书,是读者喜欢阅读的;真正的经典,是读者反复阅读的。但是如何让孩子发现经典和好
《AI赋能:驱动产业变革的人工智能应用》内容简介:本书集合了在中国人工智能产业发展联盟组织的第二批“人工智能技术和应用案例评
《色彩心理探析》为那些有志于从事色彩学习的人士以及色彩专业人士提供专业指导,使他们懂得在实际工作中如何应用色彩形象体系,
本书是关于形式语言、自动机理论和计算复杂性方面的经典教材,是三位理论计算大师的巅峰之作,现已更新到第3版。书中涵盖了有穷自
三级PC技术教程(全国计算机等级考试教材系列) 内容简介 本书是根据教育部考试中心*新制定的《全国计算机等级考试大纲 (2004年版)》对三级PC技术的考试范围...
可用性设计是Web设计中最重要也是最困难的一项任务。《点石成金》的作者根据自己多年从业的经验,剖析用户的心理,在用户使用的模
CorelDRAW X4基础运用与设计实例 本书特色 《CorelDRAW X4基础运用与设计实例》:艺术与设计类规划教材。CorelDRAW X4基础运用与设...
《大数据时代的人力资源管理》内容简介:本书采取人物对话的形式,用讲故事的方法,将人力资源管理中一些典型的问题用高级数据分析
《我家走出四博士》内容简介:本书是一部包括教育智慧、教育艺术的家庭教育指导书。本书作者李振霞在养育四个孩子的漫长过程中不断
《网页设计心理学》出自国际知名的网页设计心理学专家之手,讨论了当前网页设计领域内最为热点的话题。是什么让访客点击网页中的
“即便我已经使用Erlang多年,在编程的时候仍然需要参考《Erlang编程指南》。不同层次的Erlang程序员都会发现本书是有价值的学习
C程序员在编写程序时手头一定要有这本书。在这本书中,C语言专家PeterPrinz和TonyCrawford为你提供大量的编程参考信息。全书叙述