相关阅读:

马云:我不懂技术,但我尊重技术(附演讲全文

鹿晗关晓彤公开恋情,是如何把微博服务器搞炸的? 附大型网站高可用架构和解决方案

互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)

读完这个文章,你也可以向小伙伴讲讲搜索引擎了

10 月份上海 QCon 大会上,360 搜索架构师郝一昕将带来演讲《360 亿级搜索容器云平台架构实践》。整理出的这篇文章虽然讲的是高深的搜索技术,但它从搜索引擎的相关知识点入手,简洁明了,读来大有裨益。

首先可能很多人像小编我一样会觉得,搜索其实就是指一个业务,但是 360 搜索作为国内知名度和使用量第二的搜索引擎,在每日上亿用户访问量的背后,竟然是有数百条业务线在满足用户不同的需求。

就算你知道搜索业务背后其实不仅是一种业务,那可能你也不知道它到底有多复杂。如果你连这都知道,那……那当我没说,静静地往下看就是了。

搜索产品虽然只是一个输入框,但后面提供的服务有很多不同业务引擎支撑, 每个业务引擎又有很多不同的策略, 每个策略又有很多模块在协同,所以这背后的支撑系统其实是很复杂的。郝老师从以下几个角度去分析,虽然有打广告的感觉,但是客观息怒,这确实可以让人很快了解这些业务场景具体是怎么回事。

综合搜索

360 搜索引擎是一个综合搜索引擎。通过 360 搜索,用户可以了解时事新闻资讯,查找自己关心的任何主题的信息,还可以搜索各种问题的解决方案,甚至通过搜索辨别虚假信息、骚扰电话等等。

特色产品、创新

360 搜索有很多有特色的产品和创新。以信息内容消费的安全层面为例,360 搜索提供了大量的产品细节优化和创新,比如金融股票投资、健康等多个社会领域,包括了 14 类风险提示。网络信息生成环境纷繁复杂,我们极尽可能帮助用户避免被不靠谱信息欺骗。

多种垂直搜索服务

360 搜索针对不同类型的信息,提供相应 12 种垂直搜索服务,比如视频、音乐、图片、地图、应用软件、手机软件搜索和下载等,很明显地,每种垂直服务后边都是不同的业务线在支撑。

搜索体验

在搜索体验上,通过大量算法,甚至人工智能技术,保障用户快速找到他们需要的信息,同时在信息的权威性、多样性和展现形式上给用户提供更好、更智能的体验。

比如通过用户搜索的内容和访问偏好,对返回结果进行排序,将标题摘要进行一定程度的优化,以更容易理解的方式呈现给用户,并且更快速地去判断这些内容是否是他们需要的信息。

360 搜索也通过很多研究和试验,进行大量的搜索体验创新,比如搜索流式体验。360 搜索的技术人员使用大数据技术,每天挖掘出热点事件推送给用户,当用户浏览这些信息的时候,搜索结果会依据该热点的整体的时间线去梳理,给用户提供更丰富的信息流式浏览体验。

搜索实体化

比如用户在搜索医疗类的关键词或者疾病症状关键词的时候,360 搜索引用医疗人工智能技术帮助用户自我判断,自助分诊。同时通过搜索聚合进行信息权威度、价值的筛选,优先把权威专家、三甲医院医生,以及百科信息呈现给用户,提高用户信息消费安全性,进而降低用户被虚假信息误导的可能。

深度领域垂直问题解决方案

在产品理念上,360 搜索除了提供出色的搜索体验,满足用户各种需求,还提供深度领域垂直问题解决方案,比如搜索视频的在线播放体验、下载体验;比如搜索机票、火车票,360 搜索会提供可靠的预订票务方案;搜索天气,则提供天气预警、交通出行、空气质量等生活服务参考信息等。

深度消费体验

360 搜索不仅关注用户找到的信息的靠谱性,更关注找到之后的消费体验,也就是说具体问题解决的体验,比如下载软件的安全性,360 搜索会实时严格检查是否包含并病毒木马,也会关注访问速度等安全相关因素,对有风险的一定拦截掉,保障用户权益。

郝老师介绍完这些,我才突然明白,原来我们平时使用 360 搜索的时候,看似简单的一个搜索入口,背后竟然有那么强大的设计逻辑,而这所谓的“搜索业务”,还真的是需要很多业务线去支持,这早已超出了一个搜索知识小白的认知范畴。

接下来我从开发的角度请教了郝老师。其实,说起搜索引擎的开发,稍微知道一点网络开发的人会先想到“爬虫”,这似乎是最容易、最直接的一种网页搜索技术,直接拿起 Python 写个简单的爬虫脚本也不过几分钟的事,但是如果想要专业去做搜索引擎,那么这涉及到的东西有很多,也很复杂,郝老师为我们梳理了一翻。

首先,要知道网络爬虫其实只是搜索系统中的一个模块,搜索系统并不是只有一个爬虫。提供一定检索功能的搜索系统,使用开源软件就可以做到。

网络爬虫(抓取系统)有近百种开源;索引建库索引检索有十几种,比如著名的 Lucene 以及基于 Lucene 的好几种分布式检索系统;数据存储处理可以依托 Hadoop,国内的开源分词系统也有很多。

这些开源系统都有十几年的历史了。对于数据量和访问量不太大的情况,或者非核心业务、线下业务,上述组合有非常广泛的使用。

但是,实用的网页搜索由于其大数据量、高并发,以及对于搜索结果质量、搜索性能以及可靠性、稳定性的苛刻追求,现阶段只能是以自研为主,只有少数组件可依托开源系统。

搜索系统本身至少包含网页抓取、网页评价、反作弊、建库及在线检索、ranking 排序策略等模块。实现一个初级的网页搜索系统,基本脱离不开 IR(Information Retrieval)的范畴,像倒排索引、索引压缩、Google 的 PageRank、经典的打分策略 TF-IDF及 BM25等都涵盖在内。

当然随着时代的发展,一些可选件,比如近十年国内各搜索厂商开始铺开的机器学习及近期的深度学习可能日后也是一个初级搜索系统的必备品了。IR 主要还是理论指引,搜索引擎涵盖的各种大规模分布式系统的具体实现还要考校架构和工程的能力。

除了搜索系统本身,一个完善的基础架构也是必不可少的,最著名的比如 Google 的三驾马车GFS、BigTable、MapReduce,以及开源的 Hadoop

对于网页搜索几百上千亿的数据容量、秒级的数据更新频率而言,没有一个类似 Hadoop 的数据存储与处理系统根本不可想象,Google 的三驾马车也正是搜索的现实需求催生出来的。

具体来讲,一个完整的搜索引擎主要由下面四个系统组成,涉及到大数据处理、网络通信、策略算法、高性能服务架构等方面的知识技术点(这里针对 360 搜索的规模)。

1. 网页抓取系统

如“爬虫”,这个系统主要通过各种策略 (种子站点、时效性和用户点击等等)从互联网抓取网页,一般网页抓取系统是一个分布式、多层次的,由几百台机器组成的分布式计算机群,抓取完成后将网页交付给网页分析筛选系统

2. 网页分析筛选系统

主要负责对抓取后的网页数据进行分析处理,基于分布式计算框架将原始网页转化为结构化数据,并根据网页的特征和内容信息进行质量筛选,通过质量筛选的网页数据交付给网页建库系统

3. 网页建库系统

基于分布式离线或实时(例如 Hadoop、Storm)计算框架对质量筛选网页进行属性提取、文本分词、创建结构化的正排和倒排索引数据,交付给网页检索系统提供检索服务

4. 网页检索系统

基于几千台机器组成的检索服务集群,依赖网页建库系统提供索引数据,对用户请求的 query 结果进行倒排求交、排序计算(各种 ranking 策略)、检索结果合并等处理,将检索结果提供给用户使用

在实际的搜索引擎应用中还需要考虑时效性效果

时效性

从用户检索的时效性方面,会将上述的四个系统部署成多个数据处理流程线,主要包括以下三个:

1. 实时索引

网页抓取产出的网页提交到基于 Storm 实时计算框架的分布式计算系统,进行网页分析、网页筛选和建库预处理,输入到消息队列服务(例如 kafka),线上机器读取消息队列进行实时建库,同时提供检索服务。

2. 增量索引

网页抓取产出的网页数据输出到分布式文件系统(例如 HDFS)和分布式数据库(例如 HBase)中,基于分布式离线计算框架进行网页分析,网页筛选和网页建库预处理,并将增量索引合入线上索引,提供检索服务。

3. 全量索引

直接读取分布式数据库中已经通过质量筛选的网页数据,基于离线计算框架进行分布式建库,并将索引数据推送到线上替换旧的索引,提供检索服务。

效果

从用户检索的效果方面,需要专门负责质量策略的计算,主要有以下两个方面:

1. 数据屏蔽

死链、色情、作弊、敏感等等,基于线上索引和策略,利用分布式离线或实时计算框架(例如 Spark、Storm)对线上网页进行策略处理,并将计算结果推送天级或者实时到线上,对线上的数据进行屏蔽处理。

2. 检索效果

根据网页质量、网页特征、用户行为等信息,利用离线或实时计算框架对线上网页进行策略处理,并将计算结果推送天级或者实时到线上,对线上的索引进行更新,提供更优的效果。

我们知道英文与中文搜索引擎是挺不同的,很直观的原因是“中文分词”问题,这个问题为什么会引起中英文搜索引擎如此巨大的差异,相信读者也跟我一样有一些疑惑,郝老师对此也进行了分析。

中文搜索与英文搜索算法策略大体上是相同的,但因面对的用户群的文化背景以及使用语言的不同,必然存在着诸多差异。

分词”,这是英文天然不存在的问题。但它却是中文搜索的最重要、最基础模块之一。分词的准确率直接影响着搜索结果的相关性

分词有两个难点:歧义切分未登录词识别。随着大规模语料库的使用,机器学习技术的兴起,这些都已有较好的解决方案;另外在搜索引擎中分词粒度也是个需要权衡的问题,考虑到相关文档的召回率一般会做细粒度切分。

中英文搜索引擎的差异主要体现在中英文信息处理技术的使用上。搜索引擎对用户 query 的分析有语法、语义、语用三个层次,越往后越复杂,而中文又是重义不重形的语言,这又给以上各环节处理带来了更大的困难。

语法分析

语法分析主要指词性标注和依存分析。英文等屈折语在单词上有单复数、时态、动名词等变化,很容易区别不同词性;而汉语,同样一个词在不同语境下可能是名词也可能是形容词或动词等,同一个词在担任不同语法功能时完全没有形态变化,这给计算机进行自动标注及分类时带来了更多的挑战。同理,语义角色标注等都存在如上问题。

语义分析

近来在深度学习技术的助推下,自然语言处理技术也获得了极大的发展,语义向量表示将语义分析水平提升到一个新的水平。

随着研究深入,中文与英文差异也逐渐显露出来,英文能从单词的词根中获得大量的泛化语义信息,而中文词从其单字获取的信息确很有限,但已有研究表明,中文却可以从字的偏旁部首中获取大量的泛化语义信息。

语用分析

中英文搜索分别面对着东西方完全不同的文化背景的用户,他们可能有着很大不同的语言联想网络隐喻风格。今后随着搜索引擎变得越来越智能,我们也会在不断的探索中接触并了解到两者在语用间更多更具体的差异。

以上,从搜索引擎所面临的不同自然语言问题角度谈了他们的差异,此外在工程上,中英文还存在编码识别、转换、对齐等一些具体问题,实际工作中虽然繁琐,但并未造成特别大的困扰。

技术的发展,其实很大程度上都是因为业务在驱动的,随着业务量的不断增大,业务类型的多样化,在这期间,搜索引擎也是在不断进行完善。

早期的搜索引擎索引的网页数量比较小,用户的查询也相对比较简单,通过倒排索引加基础的文本相关性算法(比如 BM25)就能较好地满足。

现代搜索引擎抓取的网页规模在数千亿,索引的网页通常也有几百亿,需要非常强大的数据处理能力和比较智能的排序算法支撑。

用户查询的角度,随着搜索引擎的普及以及人们对搜索引擎依赖的加深,搜索引擎出现了大量非常复杂口语化的查询。这就要求搜索引擎具备强大的查询理解能力,通过依存句法分析、机器翻译等 NLP 技术对用户提交的查询进行纠错、改写、核心词提取等处理,为后续的检索、排序提供指导。

网页的角度,由于经济利益的驱动,互联网上存在大量作弊、采集网页,作弊手段层出不穷,这就要求搜索引擎具备“火眼金睛”,能够甄别出作弊网页并进行打压。

360 搜索最近一年基于安全大数据和大规模机器学习算法推出的后羿、哪吒等算法,就是为了打压采集以及利用“黑帽 SEO”手法恶意骗取流量的站点,保护用户的正常体验,建设良好的互联网生态环境。

排序的角度,早期的搜索引擎在排序的时候只用到寥寥无几的特征,通过简单的人工规则或者线性模型拟合即可达到不错的排序效果。

现代搜索引擎在排序的时候通常用到成百上千维特征,人工规则或者简单的线性模型已经无法搞定,需要更加复杂的非线性模型来拟合这些特征(这类模型统称为 learning to rank 模型)。

看完本文有收获?请转发分享给更多人


欢迎关注“互联网架构师”,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们只聊互联网、只聊架构,不聊其他!打造最有价值的架构师圈子和社区。

本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。

  • 长按下方的二维码可以快速关注我们

  • 如想加群讨论学习,请点击右下角的“加群学习”菜单入群

向小伙伴讲讲搜索引擎?读完这个文章先相关推荐

  1. php分页类 seo,HTML_写一个对搜索引擎友好的文章SEO分页类,使用jsp/php/asp等动态程序生成 - phpStudy...

    写一个对搜索引擎友好的文章SEO分页类 使用jsp/php/asp等动态程序生成的页面如何对搜索引擎友好呢?你可能想使用url_rewrite.不过,最好还是让同一个网址在任意时间对应的页面内容都是一 ...

  2. CSDN文章被洗稿、抄袭严重!用Python做一个“基于搜索引擎的文章查重工具”,解决!...

    公众号后台回复"图书",了解更多号主新书内容 作者: 1_bit 原文链接:http://suo.im/5V1JpX 前言 文章抄袭在互联网中普遍存在,很多博主.号主深受其烦. 近 ...

  3. 如何禁止搜索引擎收录WordPress站点某个分类的文章?

    ​​建立好个人博客网站之后一般都比较冲动,什么类型的文章都发布,然后慢慢地就只专注于某些领域的文章,那么以前的一些"无用" 的旧文章怎么办呢?如果直接删除有可能会被降权,所以我们可 ...

  4. python文章抄袭检测_CSDN文章被洗稿、抄袭严重!用Python做一个“基于搜索引擎的文章查重工具”,解决!...

    前言 文章抄袭在互联网中普遍存在,很多博主.号主深受其烦. 近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制.黏贴后发布标原创屡见不鲜,部分抄袭后的文章,甚至标记了一些联系方式从而 ...

  5. python 手把手教你基于搜索引擎实现文章查重

    前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦.近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制.黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联系方式从而使读者获 ...

  6. python 基于搜索引擎实现文章查重

    前言 文章抄袭在互联网中普遍存在,很多博主都收受其烦.近几年随着互联网的发展,抄袭等不道德行为在互联网上愈演愈烈,甚至复制.黏贴后发布标原创屡见不鲜,部分抄袭后的文章甚至标记了一些联系方式从而使读者获 ...

  7. 深入理解搜索引擎-搜索召回

    ​你有没有想过,当我们在搜索框中输入关键词时,搜索引擎是如何确定返回哪些内容给你的?搜索引擎底层有一个巨大的索引库,返回的搜索结果跟你输入的关键词又有什么关系?今天我们就来讲讲搜索引擎中的召回. 召回 ...

  8. 【科普】搜索引擎的工作原理

    昨天的文章 全球化的误区,本地化的机会 ,评论里,有人说,搜索引擎技术似乎不需要本地化,这一看就是彻底不懂这个领域的人讲的.当然,实话说,如果有人说,google在中文本地化方面做得非常好,我是可以部 ...

  9. 金沙数据-《大话搜索引擎》之开篇

    浮生一叶草,岁月催人老,不觉间已在搜索行业间混吃了七年有余.每每踌躇满志的想写一系列搜索引擎的文章,最终都被各种原因推到了九霄云外,最后归纳了其实最根本的原因只有一个字----懒!! 一.为什么要写& ...

  10. 2015最新百度搜索引擎(seo优化)排名算法

    多少年来,对于弄清百度排名算法成为了一代又一代站长的最高目标.随着百度推出了搜索引擎网页质量**,直接揭开了神秘的百度排名算法,这是作为站长福音啊.现在小编就来为大家介绍一下.  首先想要得到直接需要 ...

最新文章

  1. 云解析DNS产品优势与应用场景
  2. K近邻算法KNN的简述
  3. angular2、ng2 http get post 传参
  4. RocketMQ的核心概念讲解
  5. zk 布局_ZK实际应用:样式和布局
  6. Java 阶段面试 知识点合集 - 我们到底能走多远系列(15)
  7. c语言存储结构的实现,(C语言)栈的链式存储结构的实现
  8. C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解)
  9. 【ElasticSearch】Es 源码之 IndicesService 源码解读
  10. java迷宫实训报告_Java综合实训报告-迷宫.doc
  11. 文科出身敲出 Instagram,被小札“挤”走,建新冠追踪网站
  12. Windows 8 Directx 开发学习笔记(八)要有光
  13. Matlab并行编程cellfun arrayfun
  14. Ubuntu 16.04 系统快捷键推荐设置
  15. Spring源码浅析之配置文件解析(一)
  16. 发卡网源码附企业发卡网源码搭建安装教程
  17. 运营技巧|如何把产品运营好?
  18. Unity编辑器录屏神器:Unity Recorder
  19. 医学图像配准实现代码(matlab篇)
  20. Compose主题切换——让你的APP也能一键换肤

热门文章

  1. 结对-结对编项目作业名称-最终程序
  2. python的基本操作 1
  3. Custom Corporate Background for NetBeans Platform Applications
  4. ASP.NET 4新增功能(一) ASP.NET核心服务
  5. AS 中强制类型转换
  6. 19. 删除链表的倒数第N个节点【双指针经典应用】详解
  7. poj 楼天成的男人八题系列 A New Stone Game 博弈问题
  8. 苹果Mac好用的SSH连接客户端工具:​​​​​​​​​​​​Termius
  9. 如何在Mac上控制对日历的访问?
  10. Ubuntu18.04 修改IP地址、查看网关、防火墙