首页 存档 技术 查看内容

搜索引擎技术原理与Twitter实时搜索引擎的进化

2018-3-30 13:00 |来自: 互联网 295 0

摘要: 引言 搜索从单表搜索,到多表多库搜索,再到内部网站全文搜索,再在在线搜索引擎。接下来,搜索引擎又变成了现在很多智能推荐产品的前端技术,比如商品推荐,影视推荐,文章推荐。 本文尝试从搜索引擎技术原理,接 ...

引言

搜索从单表搜索,到多表多库搜索,再到内部网站全文搜索,再在在线搜索引擎。接下来,搜索引擎又变成了现在很多智能推荐产品的前端技术,比如商品推荐,影视推荐,文章推荐。

本文尝试从搜索引擎技术原理,接下来讲Twitter搜索技术的进化。

搜索引擎原理

搜索引擎按使用场景可以分为内部搜索,面向大众用户的在线搜索,聚合搜索(元搜索)等几类。

搜索架构本质上主要由索引与查询两部分构成。


(1)文本采集


用于抓取文档,这一任务由爬虫来实现。

这是一个很酷的名字,英文名为Spider、Crawler、Robots,中文称做网络蜘蛛,机器人或自动索引器。

叫它爬虫亲切也最贴切,这是因为它主要的活儿就就是扫描互联网,“阅读”它新探索到的数据。


爬虫可以由我们自己写,也可以是一些已经开发好的标准化爬虫来完成。用它扫描任何开放访问的内容,采集想要的内容,比如阅读和分析页面中的热词,更新使用频率、页面呈现位置等。


利用爬虫对网站采集,如新闻、文章、博客、微博、论坛、商品、视频、文件等内容进行抓取。


搜索引擎服务商,比如Google,百度,Bing,搜狗们每年都会推出各个行业的搜索指数,可以依据这些搜索大数据来得出用户兴趣和行业趋势。


做为搜索引擎的数据源,当搜索完毕接下来需要创建索引。

(2)索引创建

索引本质上是一个大的单词库与网页列表对应关系,比如百度有一个自己的中文词库。比如用户向搜索引擎询问python时,搜索引擎会检查其索引,然后提供python的网页列表。

爬虫定期扫描整个网站,每个网站的链接,分析和抓取协议包,解析包,以发现新上线的网站或API,以便它们始终具有最新的网站索引。

索引包括网页采集,文本抽取转换和索引创建,此部分为搜索引擎架构的线下部分。

索引的创建包括以下的步骤:

1)文本转换

将文本转换为索引项或者特征,由中英文切词,超链接分析等技术实现。

2)创建索引

创建索引的作用用来快还 检索.由权值计算,创建倒排索引等实现.

3) 查询

此部分给用户提供一个搜索框,用户交互,排序和评价等应答,这部分是搜索引擎的线上部分。

用户交互包括查询的输入,转换和结果的输出,提供搜索数据的API。

4) 排序

此部分为搜索引擎系统的核心,根据用户查询和索引模型生成一个按照分值排序的文档列表。

5)评价

用于评测搜索引擎的结果质量与效率。

以搜索引擎的进化类似,下面我们一起了解Twitter的站内搜索的升级与迭代史 。

Twitter内部搜索的进化

任何一个产品都是迭代出来的。刚一开始Twitter并未开发自己的搜索引擎,而使用数据库进行tweets推文的全文搜索。


原理是,当一个新的用户tweets发布后,会通过Ingester这个中间件保存到MySQL中,twitter的技术团队使用时间戳做索引,分成若干按时间分的数据表。当一个数据表写满再接着写下一个表。如果用户发起了一个查询 ,就通过搜索前端访问MySQL数据库进行查找。


由于发贴量量过于庞大,用这种架构搜索所有内容并不现实,所以每次搜索只支持3天的『新鲜』数据查询。


使用MySQL全文搜索能支持的查找方式比较单一,那时的MySQL也不像现在这样强大。比如添加数据困难,查询语法不支持,相关性搜索,扩展开发比较困难。


此外,终端用户在查询时,并不只对单一的关键词进行搜索,还会对多个关键词排列组合进行搜索,需要对关键词提示,过滤,切分,以缩小范围搜索。

面对更复杂的需求,Twitter的技术团队使用Lucene这个开源库开发了名为『Earlybird』的新一代索引服务器。这只早起的鸟实时地为推文建立倒排索引,Earlybird支持类似SQL的与或非的条件查询,这样搜索就变得方便快捷多了。


这时用户在搜索时,搜索前端直接和Earlybird通信,MySQL只负责数据的存储。

因为数据太多,twitter布署了很多台Earlybird,每个Earlybird负责数据库里的一块数据。

并且使用了服务化,搜索使用统一一个API服务器。

这样进行一次搜索时,搜索前端会询问所有的Earlybird,并且可能很多Earlybird都查到了结果,这样给搜索前端带来了很大的压力。

接着,twitter想开发一款产品来管理这些Earlybird集群,将它们的结果汇总给用户,这个产品被称为『blender』。

随着服务的升级,一个新的需求是要搜索隐藏的,或者分组可见的推文,这时就不能用同一种Earlybird进行搜索了,就需要一种新的分化出的protectedEarlybird部门来协助服务。

另一个升级是实现全文搜索,就是搜索的数据不仅仅局限于三天。可是这个数据量太庞大了,tweet有几千亿条,全部遍历显然是不可能实现。


和很多技术团队一样,Twitter用了一个Smart的策略,采用算法保存2%质量最高、最可能被检索的推文在内存里,另外保存大约16%的推文在SSD硬盘中,这样可以支撑对历史推文数据的搜索。

随着服务层的推进,Earlybird演变为平台,可以满足多客户的需求;blender也已经技术商业化为一个框架,可以用不同的方式开发运营。

搜索技术底层架构是个值得我们深入研究并实践的内容。

参考文献:

Twitter搜索API:https://api.twitter.com/

Dynamic Memory Allocation Policies forPostings in Real-Time Twitter Search

http://www.umiacs.umd.edu/~jimmylin/publications/Asadi_etal_KDD2013.pdf

本文转载于微信公众号: 21CTO(we21cto),更多微信文章请扫描关注公众号:

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部