热门搜索 :

文章
  • 文章
搜索

顶顶大名

新手学SEO搜索引擎排名的门户网站

QQ:  952770702

搜索引擎首页 >> 搜索引擎营销 >>搜索引擎营销 >> 【搜索引擎技术】搜索引擎为什么这么快?原理其实很简单
详细内容

【搜索引擎技术】搜索引擎为什么这么快?原理其实很简单

  在工作中,搜索引擎是我们不可或缺的工具。它可以帮助我们从世界上数百亿的海量网页和文档中快速找到我们需要的内容。本文主要阐述了搜索引擎的搜索原理。通过分享原则,我相信大家都能很容易的理解为什么搜索引擎可以这么快。

【搜索引擎技术】搜索引擎为什么这么快?原理其实很简单

  全球最大的中文搜索引擎——百度


  让我们从介绍我们生活中的数据类型开始:结构化数据和非结构化数据。


  结构化数据:具有固定格式或有限长度的数据,如数据库、元数据等等。


  非结构化和半结构化数据:指无限期长或没有固定格式的数据,如邮件、word文档等。半结构化数据,如XML、HTML等。


  根据数据的分类,有两种类型的搜索:


  搜索结构化数据:如搜索数据库,使用SQL语句。另一个例子是搜索元数据,例如使用windows search搜索文件名、类型和修改时间。


  搜索非结构化数据:如果使用windows Search,还可以在Linux下搜索文件内容、grep命令,然后使用谷歌和百度搜索大量内容数据。


  搜索非结构化数据主要有两种方法,即全文数据:


  一个是顺序扫描法(串行扫描):所谓的顺序扫描,比如寻找一个文件包含特定字符串,是一个文档去看文档,每个文档,从开始到结束,如果这个文件包含这个字符串,那么这个文档文件我们正在寻找,然后看下文件,直到所有的文件被扫描。如果你使用windows搜索,你也可以搜索文件内容,只是速度很慢。如果你有一个80G的硬盘,如果你想找到一个包含字符串的文件,不要花几个小时,恐怕我做不到。Linux下的grep命令也是这样。您可能认为这种方法比较原始,但是对于小数据文件,这种方法是最直接和方便的。但是对于很多文件来说,这种方法非常慢。【搜索引擎技术】搜索引擎为什么这么快?原理其实很简单。


  有人可能会说,非结构化数据的顺序扫描是缓慢的,和寻找结构化数据比较快(因为结构化数据有一定的结构,可以把一个特定的搜索算法加速),然后将植物体内非结构性可以使用我们的某些结构做一个数据?


  这种思想很自然,但它构成了全文检索的基本思想。它还提取非结构化数据中的一些信息,对其进行重组,使其具有一定的结构,然后搜索具有一定结构的数据。从而达到相对快速搜索的目的。


  从非结构化数据中提取并重新组织的这部分信息称为索引。


  这个表述更加抽象。通过几个例子很容易理解。例如字典,字典的拼音表和词根检查表相当于字典的索引。每个词的解释都是无结构的。如果字典没有音节。表和根式检查表,在字海中寻找一个单词只能按顺序扫描。但是,也可以提取该词的一些信息进行结构处理。例如,发音更加结构化,声母和韵母只是一个一个的列出来,所以发音是按照一定的顺序排列的,每一项。发音指的是单词被详细解释的页数。当我们搜索时,我们通过结构化拼音找到发音,然后我们可以通过它指向的页面数找到非结构化数据——也就是单词的解释。


  这种先建立索引,然后搜索索引的过程称为全文搜索。


  第二,索引中存储了什么?


  究竟需要在索引中存储什么?(我们以JAVA的开源全文搜索系统Lucene为例)。


  Apache开源搜索引擎项目Lucene和Solr


  首先让我们看看为什么顺序扫描很慢:


  这实际上是由于我们想要搜索的信息与存储在非结构化数据中的信息之间的不一致。


  存储在非结构化数据中的信息是每个文件中包含哪个字符串,即已知文件。请求字符串相对容易,也就是说,从文件到字符串的映射。我们要搜索的信息是哪个文件包含这个字符串,也就是说,已知的字符串,要请求的文件,也就是说,从字符串到文件的映射。事实正好相反。因此,如果索引总是能够将映射从字符串保存到文件,那么它将大大提高搜索速度。


  由于从字符串到文件的映射是文件到字符串的反向映射过程,因此包含此信息的索引称为反向索引。


  反向索引的所保存的信息一般如下:


  假设我的文档集合里面有100篇文档(网页也可以看作是一篇文档),为了方便表示,我们为文档编号从1到100,得到下面的结构


  左边保存的是一系列字符串,称为词典。


  每个字符串都指向包含此字符串的文档(Document)链表,此文档链表称为倒排表(Posting List)。


  有了索引,便使保存的信息和要搜索的信息一致,可以大大加快搜索的速度。


  比如说,我们要寻找既包含字符串“lucene”又包含字符串“solr”的文档,我们只需要以下几步:


  1.取出包含字符串“lucene”的文档链表。


  2.取出包含字符串“solr”的文档链表。


  3.通过合并链表,找出既包含“lucene”又包含“solr”的文件。


  看到这个地方,有人可能会说,全文检索的确加快了搜索的速度,但是多了索引的过程,两者加起来不一定比顺序扫描快多少。的确,加上索引的过程,全文检索不一定比顺序扫描快,尤其是在数据量小的时候更是如此。而对一个很大量的数据创建索引也是一个很慢的过程。


  然而两者还是有区别的,顺序扫描是每次都要扫描,而创建索引的过程仅仅需要一次,以后便是一劳永逸的了,每次搜索,创建索引的过程不必经过,仅仅搜索创建好的索引就可以了。【搜索引擎技术】搜索引擎为什么这么快?原理其实很简单。


  这也是全文搜索相对于顺序扫描的优势之一:一次索引,多次使用。


  当每次用户想要搜索相关的网页或文档信息时,我们都可以使用之前创建好的索引,快速的查询出相关信息。这就是搜索引擎能从海量数据中快速地为用户找到信息的诀窍了。

客服中心
- 售前