摘要
2600行代码,真实体验搜索引擎的开发过程
开源搜索引擎Senna/Groonga的开发者亲自执笔
探明Google、百度背后的工作机制
专业:开源搜索引擎Senna/Groonga开发者、Yahoo!搜索引擎研发者执笔。
实战易上手:2600行代码,从零开始写一个简易搜索引擎,然后进行优化。
讲解细致:浓缩搜索引擎的关键知识点 ,源码可下载,边学习边实践。
平缓进阶:书末介绍更专业的搜索引擎技术,为读者的深入学习做准备。
自制搜索引擎 内容简介
《自制搜索引擎》聚焦于Google和Yahoo!等Web搜索服务幕后的搜索引擎系统,首先讲解了搜索引擎的基础知识和原理,接着以现实中的开源搜索引擎Senna/Groonga为示例,使用该引擎的源代码引导读者亲自体验搜索引擎的开发过程。这部分讲解涉及了倒排索引的制作和压缩、检索的处理流程以及搜索引擎的优化等内容。又简单介绍了一些更加专业的搜索引擎的知识和要点,为读者今后进一步学习打下了基础。
自制搜索引擎 目录
第1章 搜索引擎是如何工作的
1-1理解搜索引擎的构成
什么是搜索引擎
构成搜索引擎的组件
与搜索引擎相关的组件
1-2实现了快速全文搜索的索引结构
全文搜索的两种方法
倒排索引的结构
倒排索引的构建方法
倒排索引中的术语
1-3深入理解倒排索引
倒排索引=词典+倒排文件
从倒排索引中查找单词
将单词的位置信息加入倒排文件中
从倒排索引中查找短语
1-4制作中文文档的倒排索引
分割中文句子的方法
权衡分割方法
1-5实现倒排索引
实现词典
实现倒排文件
1-6使用倒排索引进行检索
布尔检索
使用倒排索引的检索处理流程
关联度的计算方法
信息检索中的检索
1-7构健倒排索引
使用内存构建倒排索引
使用二级存储构建倒排索引
静态索引构建和动态索引构建
1-8准备要检索的文档
收集数据
数据规范化
第2章 准备全文搜索引擎的检索样本
2-1全文搜索引擎wiser
wiser的构成
准备用于检索的文档
2-2安装wiser
构建wiser
启动wiser
解压缩Wikipedia的副本
2-3运行wiser
构建倒排索引
使用倒排索引查询
比较grep和wiser的运行速度
第3章 构建倒排索引
3-1复习有关倒排索引的知识
提取词元
为每个词元创建倒排列表
3-2构建倒排索引
在存储器上创建倒排列表
倒排列表和倒排文件的数据结构
从源代码级别梳理倒排索引的构建顺序
进一步阅读源代码
专栏 根据实际情况设计搜索引擎(系统)
第4章 开始检索吧
4-1检索处理的大致流程
充分理解检索处理的流程
4-2使用倒排索引进行检索
从源代码级别梳理检索处理的流程
解读split_query_to_ tokens()函数的具体实现
使用具体示例加深对检索处理流程的理解
解读函数search_docs()的实现细节
解读函数search_phrase()的实现
专栏 如何实现标签检索
第5章 压缩倒排索引
5-1压缩的基础知识
压缩倒排索引的好处
专栏 压缩的目的
倒排索引的压缩方法
倒排文件的压缩方法
压缩的原理
5-2实现wiser中的压缩功能
压缩功能源代码的概要
了解无需进行压缩时的操作
抓住Golomb编码的要点
解读Golomb编码中的编码处理
解读Golomb编码的解码处理
第6章 挑战wiser的优化及参数的调整
6-1提高检索处理的效率
优化检索处理
将查询分割为无重复部分的词元序列
6-2禁用短语检索
分析对2字符的字符串进行检索时的行为
分析对3字符的字符串进行检索时的行为
6-3改变检索结果的输出顺序
作为检索结果排序核心的指标
按照文档大小降序排列的检索结果
专栏 排名欺诈
6-4让1个字符的查询也能检索出结果
获取以特定字符开头的词元的列表
合并检索到的结果
专栏 如何实现相似文档的检索
6-5调整控制倒排索引更新的缓冲区容量
确认由缓冲区容量的差异带来的不同效果
用sar命令分析负载
6-6调整只有英文字母的词元的分割方法
如何避免用英文单词检索时准确率下降的问题
如何判断某字符是否属于索引对象
修改负责分割词元的函数
6-7确认压缩的效果
观察Golomb编码的效果
对比压缩启用前后的索引大小
专栏 避免滥用全文搜索引擎
第7章 为今后更加深入的学习做准备
7-1 wiser没能实现的功能
倒排索引之外的全文搜索索引
高效处理大规模数据的存储器
利用缓存提高检索的速度
使用各种各样的压缩方法
优化搜索结果的排名
调整准确率和召回率
降低检索结果排序处理的负载
并行处理
结合对属性的筛选过滤
分面搜索
专栏 时延和吞吐量
7-2全文搜索引擎Groonga的特点
通过词元的部分一致检索提升召回率
使用内存映射文件片段
专栏 宣传活动的重要性
7-3实现出考虑到用户意图的搜索引擎
引入停用词
应对词素解析的错误
专栏 断句错误
处理全角字符和半角字符
对查询进行归一化
留意布尔检索的解析过程
通过词素解析器适当地解析查询
对错误的输入进行修正
输入补全
建议用户检索相关的关键词
7-4收集、提取文档时的要点
制作爬虫时的处理要点
在提取文本时需要处理的要点
Appendix附录
A-1 深度话题
近几年的压缩方法
动态索引构建
分布式索引
A-2 wiser中的文本提取和存储
用于处理XML的2种API——DOM和SAX
提取文档的标题和正文
掌握状态的迁移
构建文档数据库
后记
自制搜索引擎 精彩文摘
第 1 章 搜索引擎是如何工作的
在体验搜索引擎的开发过程之前,我们先在第 1 章介绍一下搜索引擎的基本概念。搜索引擎的基础是应用于信息检索、数据库等领域的信息技术,要想开发搜索引擎,横跨多个领域的广泛知识是不可或缺的。在本章我们尽可能通俗易懂、简明扼要地总结归纳了这些知识。由于本章讲解的是后续章节的背景知识,所以恳请诸位认真地读下去。
1-1 理解搜索引擎的构成
在本节,我们首先介绍什么是搜索引擎,然后再大略地讲解其基本架构。由于从 1-2 节开始还会详细地讲解有关内容,所以在本节就让我们先在大体上了解一下搜索引擎的全貌吧。
什么是搜索引擎
搜索引擎是一类系统或软件的统称,作用是从文档的集合中查找(检索)出匹配信息需求(查询)的文档,信息需求是由单词、问题等构成的。
确切地说,本书所讲解的搜索引擎其实是“全文搜索引擎”。所谓的“全文”指的就是全部的句子,当检索的对象为“由文本构成的文档中的全部句子”时,对于该文档进行的检索就称为全文搜索。而实现了这种全文搜索的系统就是全文搜索引擎(全文搜索系统),在英文中一般称为 Full-text Search Engine。在本书之后的章节中,提到“搜索引擎”指的就是全文搜索引擎。
在现代的搜索引擎中,不仅能看到 Google 和 Yahoo! 等 Web 检索,还可以看到邮件检索和专利检索等各式各样的应用程序(应用层)。当然,应用程序的用途和使用方式不同,搜索引擎的规模和其所要求的系统必备条件也就不同。尽管如此,在这些应用程序中,搜索引擎的基本结构却没有太大的差异。本书将以搜索引擎的基本结构为主进行讲解。
下面,就让我们先从搜索引擎的全貌看起吧。
构成搜索引擎的组件
搜索引擎一般由以下 4 个组件构成。
索引管理器(Index Manager)
索引检索器(Index Searcher)
索引构建器(Indexer)
文档管理器(Document Manager)
本文来自醉红颜投稿,不代表电子书资源网立场,如若转载,请联系原作者获取。