当前位置:首页>ElasticSearch>什么是Elasticsearch

什么是Elasticsearch

作者:微学网发布时间:2019-08-28 23:03:46

本文从四个方面阐述什么是Elasticsearch的背景知识
1、什么是搜索
2、使用数据库做搜索
3、什么是全文检索、倒排索引和Lucene
4、什么是Elasticsearch

什么是搜索

寻找你想要的信息,你会输入几个文字或者关键词,然后期望得到这个关键字对应的一些有用的你想要了解的信息。

搜索的种类

搜索引擎

比如百度,我们想要搜索我们需要的资料,了解信息的时候,就会浏览器打开百度 或者谷歌,输入我们的关键字,然后得到需要的结果。

比如搜一部好看的电影《哪吒之魔童降世》,比如搜一本书《世界上最伟大的推销员》,亦或是搜索今天的新闻,想要听的音乐等等。

但是百度就代表了搜索吗?显示不是。我们还有其他很多搜索的场景。

垂直搜索(站内搜索)

互联网搜索

一般大型互联网网站都具有站内搜索功能,以下类型的网站搜索更是常见

  • 电商网站
  • 招聘网站
  • 新闻网站

系统软件的搜索

比如OA办公软件、windows、linux文件搜索
通过这些软件,来搜索员工信息呀,存储的文件呀,等等。

后台管理应用系统

比如电商系统后台搜索今天iphone今天卖了哪些订单,都被哪些用户买走了,分别从哪些仓库发货。

使用数据库存储数据

如果让我们做网站的搜索功能,第一点,我们就想到了使用数据库来实现这个功能。

比如我们使用mysql数据库来存储数据,存储电商网站、招聘网站、新闻网站的数据,使用sql来查询数据,完成搜索功能,向老板交差。

电商系统的商品搜索

如果我们要实现电商系统的商品搜索,实现如下两个功能:

  • 搜索含有苹果的商品
  • 在数据库的product商品表,建立一个product_name字段来存储商品名称

如果使用数据库来处理的话,不考虑全文索引,我们要写如下的sql语句

SELECT * FROM Product WHERE ProductName LIKE '%苹果%'

假设商品有1000万个,那么基本上就要全表扫描,查找1000w次,并且每次都要把商品名称加载出来,进行整个字符串的匹配。

我们得到的结果可能如下表:

商品id 商品名称 商品描述 商品图片 商品卖家
1 山东苹果
2 山西苹果
3 苹果手机iphone

存在的问题

  • 字段的文本可能会比较长,可能长达几千上万个字符,每条记录,这样来一下,判断文本中是否存在某个字符,比如商品名称是否包含苹果,性能会比较差

  • 不能将词分词搜索,去搜索你期望的更多结果,比如搜索苹果脑,就不能搜索出苹果电脑。

  • 显然,使用数据库模糊匹配来做搜索,是不行的,性能方面就会比较差,sql执行的时间也会比较长。

什么是倒排索引、全文检索、Lucene

什么是倒排索引

扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方。

用白话解释一下,就是比如100篇文章,90篇文章带有苹果两个字,会先对每篇文章切词,假设切出1000个词,就会产生1000个索引,其中一个索引就是苹果,苹果指向那90篇带有苹果两个字的文章。另外999个索引都会分别指向各自对应的文章。索引建立好了之后,再搜索,直接根据苹果这个索引就能找到那90篇文章了,是不是超级快?

什么是全文检索

全文检索就比较好理解的,就是当我们输入“苹果脑”,会被拆分成”苹果”,“脑”两个词语,用这两个词去倒排索引里面去检索数据,检索到的数据返回。整个过程就叫做全文检索。

什么是lucene

lucene,就是一个 jar 包,类库,包含了封装好的各种建立倒排索引,以及进行搜索的代码,包括各种算法。

我们用ava开发的时候,引入 lucene jar,然后基于 lucene 的 api 进行去进行开发就可以了。用 lucene,我们就可以去将已有的数据建立索引,lucene 会在本地磁盘上面,给我们组织索引的数据结构。另外的话,我们也可以用 lucene 提供的一些功能和 api 来针对磁盘上的数据进行搜索

什么是Elasticsearch

我们可以使用 lucene 开发搜索服务,部署在一台机器上面,但是无法解决当数据量增大的时候出现的问题。

Elasticsearch 就是解决这种场景的工具;

  • 自动维护数据的分布到多个节点的索引建立、检索请求分布到多个节点的执行

  • 自动维护数据的冗余副本,保证一些机器宕机了,不会丢失任何数据

  • 封装了更多的高级功能

  • 给我们提供更多高级的支持,让我们快速的开发应用,开发更加复杂的应用,复杂的搜索功能,比如聚合分析的功能,基于地理位置的搜多(距离我当前位置 1公里 以内的电影院)