前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >搜索引擎

搜索引擎

作者头像
吉林乌拉
发布2020-11-13 10:54:21
1.2K0
发布2020-11-13 10:54:21
举报
文章被收录于专栏:吉林乌拉

在现在互联网如日中天的时代,即使你不是互联网行业的人,你也一定会用过谷歌或者百度。因为他们已经影响了我们生活的方方面面,为我们提供了很多的便利。那么在互联网行业的人我们除了使用它们,我们还迫切地想知道它们到底是怎么实现的。


以谷歌和百度为例子。它们都称之为搜索引擎。虽然听起来比较高大上。但实际上他们就是搜索数据用的。但站在数据方面考虑,实际上数据会分为两种:结构化数据和非结构化数据。

  • 结构化数据:简单来说,就是有固定格式固定长度的的数据。平常比较常见的例如Mysql、Oracle数据库等。
  • 非结构化数据:反之,就是无固定格式和长度的数据。例如比较常见的是:Email和文档数据。

按照这两种数据的划分,他们在搜索上也有很大的不同。结构化数据我们可以建立数据库索引来快速的搜索数据。而非结构化的数据搜索。我们主要有两种方式。一种是顺序扫描法,另一种是全文搜索法。下面我们详细介绍一下这两种的区别。


  • 顺序扫描法

顺序扫描法顾名思义,就是按照数据的顺序一步一步地找。找到一个然后就记录该位置。直到所有的数据都要扫描完,才知道要查找的内容都在哪些位置出现过。但这明显有相应的弊端。如果要查找的内容碰巧在数据的最后。那么该方法需要扫描所有的数据,但这之前扫描的数据均无效。这就造成了很大的资源浪费。

  • 全⽂搜索法

既然我们已经知道顺序扫描法的弊端,那我们应该怎么进⾏优化呢?因为这样的数据是非结构化的数据。没有办法像结构化的数据做索引来达到快速检索的目的。那我们到底应该怎么办呢?答案很简单。逆向思维。既然非结构化的数据没办法做到,那我们把他们改成结构化的数据不就行了吗。这里改成结构化的数据,并不是将全部的数据都改成结构化。这样将毫无意义。而是将要搜索的内容按照某种方式,做成结构化的数据,然后将结构化的数据创建索引,接着我们在通过这些结构化的索引,来搜索相关非结构化的内容。这就是全⽂搜索的基本原理。

就像我们在淘宝搜索手机一样,淘宝并不会将所有的数据都按照结构化存储,而是将相应的关键字,按照结构化存储即可。这样当我们命中关键字时,就可以搜索出来我们想要内容。也正是因为这些,所以常常有些人在搜索的时候,喜欢输入很多的修饰词,适当的修饰词是可以准确地帮助我们,找到我们想要的内容,但如果修饰词过多的话,并不会达到我们想要的,因为他检索的本质是命中关键词。这也就是为什么有时我们搜索时,明明加了很多修饰词,居然和我们没有加修饰词搜索出来的内容是一样的原因。

所以谷歌和百度搜索引擎的基本原理就是:网络机器人或者网络蜘蛛通过扫描网页中的内容,提取出相应的关键词,然后为提取出的关键词建⽴索引,并记录该关键词在文章中位置,当用户搜索时,如果命中该关键词,搜索引擎就根据按照之前的索引进查找,这样可以很快的返回用户想要的数据内容。


下面我们介绍一下现在比较常见的搜索引擎,并介绍详细介绍一下它们之间的区别。

  • Lucene:它归属于Apache软件基金会。它是一个全文检索引擎工具包,所以它并不是一个全文检索引擎。既然是工具包,所以它提供了强大的API功能例如:
  1. 可扩展的⾼高性能索引
  2. 强⼤大,准确,⾼高效的搜索算法
  3. 跨平台解决⽅方案

由于它只是一个全文检索引擎工具包,所以在使用时,需要我们自行编码。虽然现在也支持了多种语言,但最成熟的开源版本,还是Java。所以要想使用它,我们需要Java的编程基础。

  • Solr:它是一个独立的企业级搜索应用服务器,Solr是基于Lucene的Java库构建的开源搜索平台。并提供了HTTP的方式,创建索引和查询数据。除此之外,它还提供了以下比较高级的功能:
  1. 全⽂文搜索
  2. 分⾯面搜索
  3. 实时索引
  4. 动态群集
  • Elasticsearch:它也是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch也是用Java语言开发的。它和Solr一样,除了基本的数据检索功能外,也提供了以下高级的功能:
  1. 分布式搜索
  2. 数据分析
  3. 分组和聚合

下面我们介绍一下,为什么会出现搜索引擎技术,而不是用传统的数据库去实现此功能。

我们知道如果采用传统的数据库,我们可能通过创建索引的方式,去优化我们的查询速度。并且,我们还知道,如果在数据量比较大的话,还可以采用分库分表的方式继续优化。那为什么还会出现类似Elasticsearch这样的搜索引擎技术呢?答案就像我上面介绍的那样。搜索引擎并不会将所有的数据全部按照结构化存储,而是按照相应的关键字存储。并且按照现在的网页数据,不同的网站,内容大不相同,如果采用结构化存储,那么在数据库设计上很难实现。除此之外,我们知道,在数据库中要想快速的查询数据,那么必须要创建相应的索引,但我们在使用SQL语法时,尝尝会因为我们使用不当,或者某些特定的方式,命中不到索引,这就导致使用数据库检索时,会比较慢。比较常见的就是。例如我们在数据库中搜索指定的关键字,并且该关键字的字段我们创建了索引,所以在搜索时,查询的速度很快,因为它命中了索引。但在实际的应用场景中,我们并不会正好输入的关键字就是数据库中存储的,而是采用的是模糊搜索的方式。而在数据库中要想使用模糊搜索,则要使用like关键字。但在使用like关键字时,则索引会失效。除此之外,我们在数据库中创建索引时,并不是越多越好。因为如果索引过多的话,则会影响inster和update的性能。所以,正是因为数据库有种种这样的原因,才会出现全文搜索引擎存在的必要。


下面我们介绍一下全文搜索引擎比较适合的应用场景都有哪些:

  • 搜索数据比较大的非结构化数据。
  • 支持文本数据量达百万级别。
  • 支持交互式⽂文本的查询。
  • 对写需求比较少的需求,因为全文检索的核心目的就是查询。

以上内容就是本篇的全部内容,在接下来的文章中,我们将重点更新有关Elasticsearch相关的内容,欢迎大家支持,谢谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档