检索技术核心20讲
陈东
奇虎360商业产品事业部资深总监
立即订阅
2334 人已学习
课程目录
已完结 29 讲
0/4登录后,你可以任选4讲全文学习。
课前必学 (2讲)
开篇词 | 学会检索,快人一步!
免费
导读 | 三步走策略,轻松搞定检索!
基础技术篇 (8讲)
01 | 线性结构检索:从数组和链表的原理初窥检索本质
02 | 非线性结构检索:数据频繁变化的情况下,如何高效检索?
03 | 哈希检索:如何根据用户ID快速查询用户信息?
04 | 状态检索:如何快速判断一个用户是否存在?
05 | 倒排索引:如何从海量数据中查询同时带有“极”和“客”的唐诗?
测一测 | 检索算法基础,你掌握了多少?
特别加餐 | 倒排检索加速(一):工业界如何利用跳表、哈希表、位图进行加速?
特别加餐 | 倒排检索加速(二):如何对联合查询进行加速?
进阶实战篇 (13讲)
06 | 数据库检索:如何使用B+树对海量磁盘数据建立索引?
07 | NoSQL检索:为什么日志系统主要用LSM树而非B+树?
08 | 索引构建:搜索引擎如何为万亿级别网站生成索引?
09 | 索引更新:刚发布的文章就能被搜到,这是怎么做到的?
10 | 索引拆分:大规模检索系统如何使用分布式技术加速检索?
11|精准Top K检索:搜索结果是怎么进行打分排序的?
12 | 非精准Top K检索:如何给检索结果的排序过程装上“加速器”?
13 | 空间检索(上):如何用Geohash实现“查找附近的人”功能?
14 | 空间检索(下):“查找最近的加油站”和“查找附近的人”有何不同?
15 | 最近邻检索(上):如何用局部敏感哈希快速过滤相似文章?
16 | 最近邻检索(下):如何用乘积量化实现“拍照识花”功能?
特别加餐 | 高性能检索系统中的设计漫谈
测一测 | 高性能检索系统的实战知识,你掌握了多少?
系统案例篇 (4讲)
17 | 存储系统:从检索技术角度剖析LevelDB的架构设计思想
18 | 搜索引擎:输入搜索词以后,搜索引擎是怎么工作的?
19 | 广告系统:广告引擎如何做到在0.1s内返回广告信息?
20 | 推荐引擎:没有搜索词,“头条”怎么找到你感兴趣的文章?
结束语 (2讲)
结束语 | 成长和进化,技术如此,我们亦如此
免费
结课测试 | 这些检索知识,你都掌握了吗?
检索技术核心20讲
15
15
1.0x
00:00/00:00
登录|注册

18 | 搜索引擎:输入搜索词以后,搜索引擎是怎么工作的?

陈东 2020-05-11
你好,我是陈东。今天我来讲讲搜索引擎的核心架构。
搜索引擎你应该非常熟悉,它是我们学习和工作中非常重要的一个工具。它的特点是能在万亿级别的网页中,快速寻找出我们需要的信息。可以说,以搜索引擎为代表的检索技术,是所有基于文本和关键词的检索系统都可以学习和参考的。
那今天,我们就一起来聊一聊,在输入搜索词以后,搜索引擎是怎么工作的。
首先,我们一起来了解一下搜索引擎的核心架构和工作过程。然后再重点分析其中的检索系统。

搜索引擎的整体架构和工作过程

搜索引擎会涉及非常多技术领域。其中,比较重要的有网页抓取、文本分析、检索模型、索引技术、链接分析、反作弊、云存储和云计算。正是因为涉及的领域非常多,所以搜索引擎完整的系统架构也非常复杂,会由许多子系统组成。
不过,我们可以从功能结构上,把搜索引擎的核心系统分为三部分,分别是爬虫系统、索引系统和检索系统。
搜索引擎核心架构示意图
接下来,我们就分别说说,这三部分子系统具体的作用和工作过程。
首先是爬虫系统。
一个好的搜索引擎,必须要能采集足够多的网页。因此,我们需要通过高性能的爬虫系统来完成持续的网页抓取,并且将抓取到的网页存入存储平台中。一般来说,我们可以将抓取到的网页存放在基于 LSM 树的 HBase 中,以便支持数据的高效读写。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《检索技术核心20讲》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(7)

  • 老师有没有爬虫或者搜索方面的书籍推荐的

    作者回复: 搜索引擎方面的书籍,其实《信息检索导论》是可以作为基础学习的。因为其中一个作者就是Google的副总裁,书中就以搜索引擎为例子。包括还有《搜索引擎:信息检索实践》。
    国内还有《这就是搜索引擎:核心技术详解》这类书籍,都可以看看。
    至于网络爬虫,这更偏向于实践和工程。可能要结合你使用的编程语言。比如说Python的scrapy,或者Java相关的网络爬虫书籍。

    2020-05-17
    3
  • 那时刻
    请问老师,我们经常听说的page rank算法在搜索引擎中是怎么具体应用的?

    作者回复: page rank是Google很重要的一个专利,不过它的核心思想其实不复杂。它通过分析不同网页之间的相互链接关系,来判断网页的质量。打个比方,就像论文引用一样,被大量高质量论文引用的论文,应该也是高质量论文。page rank就是通过这样的方式,对每个网页赋予了一个质量分。
    那具体会在哪些环节使用page rank质量分呢?
    1.在进行索引分层时,高质量网页和普通质量网页需要区分,这时候page rank质量分就是一个很重要的参考。
    2.打分排序阶段,page rank质量分也是很重要的因子。
    3.在进行锚文本分析时,高质量网页出来的锚文本更重要。
    4.在爬虫抓取网页时,可以优先抓取高质量的网页链接出来的网页。
    以上是我想到的一些场景,供参考

    2020-05-11
    1
    3
  • 范闲
    先固定第一个词,然后找第二个词的距离。第二个词距离固定以后,找第三个词和第二个词的距离。

    作者回复: 是的。这其实是一个贪心算法。局部最优一定是全局最优。
    首先,第一个词可能会出现在n个位置。我们遍历第一个词的所有位置。
    然后,当第一个词固定位置时,我们寻找这个位置后面的最近的第二个词的位置。这样就能固定第二个词的位置。
    接着,在第二个词固定以后,我们再在第二个词后面,找最近的第三个词的位置。那么,这个位置和第一个词的位置结合,就是这次计算得到的最小窗口长度。(之所以说是贪心算法,是因为我们不需要穷举所有第二个词和第三个词的位置组合,而是只需要找最近的就可以了)
    然后我们把第一个词的这n个位置的最小窗口长度都算出来,取最小的一个,就得到了最终结果。
    当然,在求第一个词的n个位置的n个最小窗口的过程中,我们还能利用之前计算的结果。比如说第一个词的第二个位置,其实也在第二个词的前面,那么第二个词的位置不用变,第三个词的位置也不用变了。
    整体来说,你会看到,位置信息索引法,计算代价会比较大,因此,对于热门短语,能直接作为key加入倒排索引是更高效的。

    2020-05-11
    2
  • 林苏荣
    首先,感谢老师这么多课程的专业讲解。这些课程都是从很基础的原理开始,构建出整个技术架构。请问老师,在实际工业的应用中,是否都是基于这些基础原理,结合具体的业务场景做组合优化来实现。还是有其他更加专业的算法优化和设计呢?毕竟光是考虑搜索引擎所涉及的数据量就已经是天文数字了,再考虑各种处理逻辑,,,依据这些基础原理真的足以应对吗?还是一个老套路,性能不够机器来凑^O^,用超大规模的集群来完成的,谢谢。

    作者回复: 其实复杂的系统都是由简单的子系统和技术构成的。
    架构设计的目的,就是希望能将复杂系统拆解成更简单的子系统,使得我们可以更容易去开发实现。
    而在子系统中,在我们了解了对应的原理和解决方案以后,我相信开发起来会容易上手得多。

    当然,技术也是一直在进化的,专业的技术和算法优化肯定也是一直在前进。比如说排序算法,就从bm25到机器学习再到深度学习,这就是典型的例子。工业系统中的具体优化细节有很多,肯定不是一个专栏能写得完的。但这些新技术的根源还是从原理和解决问题出发演化出来的。因此,我们要更好地去理解原理和场景,这能帮助我们更好地理解和学习新技术。

    还有,关于是否堆机器的问题,现在许多大型系统都是采用分布式架构,一个好处就是可以堆机器,大家也的确都会堆机器。但是我们也不能无脑堆机器。比如说,网页的数量每年增长30%,那难道搜索引擎的服务器就要每年加30%?这是不现实的。因此,我们需要使用分层索引的设计,来保证我们不需要堆太多的机器。

    2020-05-16
    1
  • 那时刻
    关于第一个讨论题,开始的想法,使用位置信息索引法中,对于3个关键词的情况,可以锁定第一个关键词,找到最小窗口的第二关键词,然后锁定这个第二个关键词,寻找最小窗口的第三个关键词。但是老师文章中提到`如果是两个以上的关键词联合查询,那我们会将同时包含所有关键词的最小片段称为最小窗口`,这个方法貌似跟这句话相违背。举个栗子,假设这三个关键词是A B C,某一篇文章中有两处含有这三个关键词,他们之间最小窗口距离是 A1~2~B1~5~C1 (A1和B1之间距离是2,B1和C1之间距离是5), A2~3~B2~3~C2。按照开始想法的解法是,锁定A,找到最小窗口的B,是B1,因最小距离是2。然后锁定B1,找到最小距离是C1(假设B1和C2之间距离远大于5)。但是单独看B和C之间的距离,B2与C2应该是最小的。另外,如果看包含所有关键词的话,A2 B2 C2之间最小窗口是最优的,如此的话,得使用动态规划方法来计算了,但是这样一来复杂度变高了。

    作者回复: 其实不需要动态规划法,使用贪心法就够了。
    首先我们算出来锁定A1时的最小窗口。然后我们再去计算当第一个关键词取A2位置时的最小窗口。
    在计算A2的最小窗口的时候,我们可以先判断A2的位置是否小于B1,如果小于的话,那么最小窗口就是A2-B1-C1。如果A2大于B1的话,那么就重新往后找到B2。以此类推。这样,对于每个关键词的位置,我们都不会回头重复计算。

    2020-05-11
    3
    1
  • 李小龙
    老师公司怎么从零搭建搜索

    作者回复: 如果是从零开始,进行文本搜索的话,最简单的做法是使用MySQL的全文检索功能,但是效果会比较差。
    如果想更精准地进行关键词检索,那么可以使用elastic search来搭建你们的系统。当然,如果想定制各种功能,那么可以走上自研的方向。

    2020-06-10
    3
  • 一步
    在进行查询次窗口计算的时候:是只计算查询词的第一个词和最后的一个词的距离吗? 还是计算查询词中两两词之间的的距离?
    我认为计算查询次中两两词之间的窗口距离推荐的效果会更好一些

    作者回复: 在标准的短语查询中,窗口的定义就是第一个词到最后一个词的距离。
    你提出的两两之间的距离也是有意思的一个提法,也许在某些场景下是有效的,不过这样的判断可能会造成第一个词和最后一个词距离太远,在短语查询这个例子中可能不是很合适。

    2020-05-11
收起评论
7
返回
顶部