编辑导语:正如“万物皆可百度”这句话所说的,当我们遇到生活上、工作上的难题时,第一反应就是善用检索,通过各种搜索软件解决我们的困惑。你知道,当按下搜索键时,发生了什么吗?
文字较多,故分为上中下三部分,全文目录如下:
一如“万物皆可百度”、“万物无难事,只要肯百度”所言,搜索在我们生活中早已成为习以为常的事情。毕业季的我们会在每日99+的群聊信息中搜索所需的信息;工作一上午后会点开外卖,找找看今日有没有想吃的午餐;晚上回家路上,打开社交平台,搜索看看今天都有什么头条新闻…
点下搜索的瞬间,结果已出现在屏幕上,快速又便捷。殊不知在小小的屏幕之下,搜索引擎井然有序地在其巨大的数据库中,完成了检索、排序…
一、搜索
“当你终于将相关的所有信息搜罗到手后,你会做什么?”
作家詹姆斯·格雷克在《信息简史》中所言,信息洪流中,各种应对策略也随之出现。方法多种多样,但归根结底,本质上可归为两类:要么是过滤,要么是搜索。
现时代,我们每个人都能力去自由地生产、消费信息,海量的信息涌入数据库。心理学家斯坦利·米尔格拉姆的一项社会网络实验“六度分隔”中所证,这个星球上的每个人之间最多相隔六个其他人。
信息亦如此,在复杂的网络中,事物与事物之间拥有很高的连通度,但并非所有的连接都是有价值的,这些异乎寻常的连接度使得信息的搜索变得困难重重,搜索似乎变成了一件无边无际的事情。
90年代末,有人预测在如此庞大的信息中完成检索是不可能的,但至今,虽然搜索引擎在某些时候仍不尽人意,但已经具备了基本功能。
搜索介绍
维持生命力的方式就是让“血液”不停的流动,从古至今人类一直寻求更新、更快的连接交互方式。
搜索加速了信息的流通,打通了海量数据之间的自守状态,信息走向了开放。用户可以快速的获取到高价值的信息,企业和平台也可通过搜索推送给用户信息。我们可以更准确的找到结果,同时也可以看到更多相关的内容。
搜索是对互联网上的信息资源进行搜集、整理、检索的一项互联网技术。产品的搜索功能发展至今,提供给用户的已不仅仅是信息输入的搜索框,面对用户主动地推荐,引导用户消费产品中优选高质量的内容。
可以说搜索带给了我们全新的数字生活,在不胜其扰的信息中,消费者依赖于各种检索,来区分精华和糟粕。尤其是对于新手用户来说,还可以快速地了解到产品中包含的服务模块,如下图,分别为微信、淘宝、知乎的搜索界面。
微信为一款手机通信软件:通过搜索,提供给用户的内容包括有朋友圈、文章、、小程序、音乐、表情、服务;知乎为一款问答社交软件:提供时事热榜、数码、影视、科学、体育等栏目;淘宝为一款线上购物软件:主要解决用户的购物需求,在搜索界面可以看到的功能模块有搜索记录、热搜推荐(商品内容)。二、搜索引擎
搜索引擎是一门检索技术,其核心模块一般包括爬虫技术、检索排序技术、网页处理技术、大数据处理技术、自然语言处理技术等;根据用户需求、一定算法、特定策略为用户提供高速、高相关性的信息服务。
搜索引擎基本结构一般包括:搜索器、索引器、检索器、用户接口等四个功能模块。搜索引擎通过其结构来实现搜索工作,基本原理可分为信息采集模块、查询表模块、检索模块。
我们从APP、网站、小程序等不同载体中看到的搜索框,实际只是搜索引擎系统提供给用户的检索界面,当我们输入关键词,点击查询后,搜索引擎对我们输入文本进行复杂的分析,并从庞大的数据库中获取所有相关的信息,根据一定的排序策略将检索结果呈现至用户界面。
不同搜索引擎有各自的搜索策略,其索引的获取、query的分析、排序的算法不尽相同,因此在不同产品的搜索引擎搜索相同的query会获得不同的结果;当前搜索引擎收集用户行为数据,着力个性化推荐,同一产品不同时期检索某一关键词,也可能会获得不同的结果页。
具体流程如下:
提及搜索,我们脑海中马上浮现的大概有百度、谷歌、淘宝等电商平台搜索框、微博等社交平台搜索框等。这些我们常用的搜索引擎,主要是全文搜索类型以及垂直搜索类型,除此之外,搜索引擎的类型还包括目录搜索、元搜索检索、集合式检索、门户搜索引擎等等。
全文搜索:全文搜索从互联网上提取网站信息,对海量的数据进行有效的管理和快速检索,最常用的全文搜索引擎有百度、谷歌等;垂直搜索:垂直搜索引擎是针对某一行业的专业搜索引擎,是搜索引擎的分支和延伸。相较于通用搜索引擎,提供深度、准确性更高的搜索服务。垂直搜索引擎的应用方向很多,比如企业库搜索、供求信息搜索、购物搜索、房产搜索、人才搜索、mp3搜索、图片搜索、工作搜索、交友搜索等,几乎各行各业、各类信息都可以进一步细化成各类垂直搜索引擎。2.1 分词
分词是我们在搜索功能中较常听到的词汇之一。
分词就是对一段文本,通过规则或者算法分出多个词,每个词作为搜索的最细粒度一个个单字或者单词。分词的目的主要是为了搜索,尤其在数据量大的情况下,分词的实现可以快速、高效的筛选出相关性高的文档内容。
搜索过程中,分词由搜索引擎内的分词器,执行完成。分词器作用于用户的输入内容、以及文档索引建立的这两部分。前台文本内容的输入,来源于不同用户的需求;索引数据的来源可通过业务需求决定,自定义设置。
如在垂类电商业务中,我们构建索引的原始数据,便可以是商品的标题、详情、类目信息、品牌信息等,或者是从后台建立新的字段,分词过滤后进入索引区,等待检索。
2.1.1 分词流程
用户在搜索引擎界面输入关键词,点击“搜索”按钮之后,搜索引擎程序开始对搜索词进行以下处理:分词处理,根据情况对整合搜索是否需要启动进行判断、找出错别字和拼写中出现的错误、把停止词去掉。
分词的实现主要依赖分词器。分词器为分析器三大构成部件之一,文档的分词还会涉及到分词前的预处理,以及分词后的过滤操作。分析器的三构件分别为:字符过滤器、分词器、过滤器,文本在三者间流转顺序依次为字符过滤器—分词器—过滤器。
原始文本在分词之前,会流转到字符过滤器,将原始的文本作为字符流接受,通过增、减、改的方式改变字符流。处理后的流进入分词器,按照特定规则、算法执行分词操作,最后通过不同的过滤器进行处理。一个分析器中可以有0个或多个字符过滤器和过滤器,仅有一个分词器。
字符过滤器:字符过滤器用于字符流传递到分词器之前对它进行预处理,字符过滤器支持数字的转换;将所有指定的字符串替换成特定的字符串;将任意字符转换为置顶字符。分词器:不同语言分词规则有所差异,英文分词、中文分词、拼音分词的分词策略各不相同。英文分词可以根据空格将单词分开,中文分词比较复杂,可以采用机器学习算法来分词。过滤器:将切分的单词进行加工。如大小写转换、去掉停用词(如“最”、“因为”、“和”)等,该过滤器不同于检索时过滤器。
2.1.2 分词的算法
现有的分词包括有英文分词、中文分词、拼音分词。中文分词与英文分词有所区别,中文分词存在更多的难点和歧义点,不同分词策略对文档的召回率和精确率影响较大。
英文单词与单词之间,在输入时就会通过空格、逗号、句号去隔开,较好的去识别。而中文由字和字构成词,由词汇构成句子。如何去合理切分,且可以精确传达用户本意、需求,是中文分词的难点。拼音分词与中文分词的结合,更全面地处理了用户简写、误输入等使用场景。
拼音分词可以用来分析字词的全拼、首字母全拼、字词的完整拼写等,可以进行自定义的设置。拼音分词配合中文分词,完整关键词的过滤流程,达到高效分词的目的。
中文分词算法主要分为三大类,基于词典的分词、基于统计的分词、基于有序标注的分词。
不同的分词策略要适应于各自的业务场景,可能有些业务场景需要分词的精度大于速度,有些场景要求速度大于精度,因此在理解分词原理的基础上,如何去配合业务的需求,高效地实现分词功能,这些都给算法工程师提出了更高的要求。
2.1.3 分词的使用
在搜索过程中,分词器使用于文档的索引流程以及用户输入文本的检索流程中,需注意的是索引流程和检索流程中所使用的分词器需一致。
索引使用:原始文本预处理后,使用分词器将文档内容切分为单个字词;检索使用:用户输入文本对象,分词器进行分词处理,分词后建立query对象,执行检索操作。
中文分词相较于英文分词,无空格作为词之间的分隔符,且中文词语组合复杂,歧义较多,一直为自然语言处理中的难点。
2.2 构建索引
索引是对数据库表中一列或多列的值进行排序的一种辅助型数据结构,构建索引有助于对表中数据的查找和排序,检索时数据库系统不必扫描整个表,而是直接定位到符合条件的记录,大大加快了查询速度,达到了以下目的:
构建索引大大缩短查询时间的同时,也带了了一定的成本,创建和维护索引都需要时间成本和空间成本,随着数据量的增加其所占用的物理存储空间也会随之增大。数据量大、经常使用查询功能,且需要排序优化的业务情境下,索引的建立还是很有必要的。
索引的构建,主要有倒排序索引和正排序索引。倒排序索引是对关键词进行索引,以求快速得到匹配文档集;正排序索引对文档进行索引,方便于排序、过滤、汇总。倒排序索引和正排序索引是搜索引擎的重要数据结构,之后检索等的操作都建立在此基础上。
2.2.1 倒排序索引
1)倒排序索引介绍
倒排索引(Inverted index),也常被称为反向索引、置入档案或反向档案,是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。
索引是为了更快找到文档的一种数据结构,相当于图书中的目录,用户根据目录可以快速找到所需内容。倒排索引不是根据目录或编号来定位内容,它是通过文档中的某个字、词语而找到文档的索引类型,通过立即的单词标示迅速获取结果。倒排索引的建立和维护较复杂,但查询快速、便捷、高效,是文档检索系统中最常用的数据结构。
2)倒排索引的构建流程
倒排序索引的构建有两个表格至关重要。表一为文档编号及文档内容,表二为分词后关键词及对应文档编号。数据的存储时,将表二拆分为两个数据结构,用于存储倒排文件以及关键词及其偏移量。
搜索最基础、简单的流程便是外部关键词输入,表二中查询到关键词出现的位置以及文档编号,最终输出结果文档内容。
2.2.2 正排序索引
正排索引(forward index),以文档编号为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。正排序索引的查询往往满足每个文档有序、频繁的全文查询和每个单词在校验文档中验证这样的查询。
正排索引可以查询汇总到关键字的属性、相关的频次以及位置等,适用于一些过滤操作以及汇总操作。
比如说搜索 “干饭”时,可以快速查询出包含“干饭”这个关键字的文档,有利于关键字相关性和权重的计算。正排序索引,搜索“干饭”时,搜索引擎需要检索每一个文档中的每一个关键词,正排索引适合于一些区间的索引。在电商的搜索中,有较多的过滤、筛选的选项,因此同时引入正排索引和倒排索引还是很必要的。
2.3 检索
未完待续…
索引构建完成后,便可依据所提供关键词,进行检索。关键词的检索、排序,以及搜索引导将在《当你按下搜索键时,发生了什么(中)》做简单介绍。
本文主要是从小白的角度尝试理解搜索引擎的工作原理及工作流程。初次涉及搜索领域,文中概念、措辞如有偏差,请留言指教,将虚心学习更正。
本文由 @大仓鼠 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自Unsplash,基于CC0协议