在正式学习ElasticSearch之前,我们先来了解一下ElasticSearch。
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。
在ElasticSearch中有四个相关的概念:
-
索引
-
类型
-
文档
-
字段
我们可以将其类比到关系型数据库中,索引就是一个数据库,类型就是一张数据表,而文档就是数据表中的一行,字段就是数据表中的一列,如下图:
ElasticSearch通常用于网站的全文检索,这意味着ElasticSearch将承担着整个系统最大搜索量的搜索业务,想象一下在淘宝搜索入口上搜索一个手机,系统背后需要经历多么大的数据量查询。然而在如此大数据量的情况下,ElasticSearch仍然能够非常出色的完成任务,它是如何做到的呢?
我们先来看一张关系型数据库中的数据表:
+----+------------+
| id | name |
+----+------------+
| 1 | zhang san |
| 2 | zhang san2 |
| 3 | zhang san3 |
| 4 | li si |
+----+------------+
假设这张数据表的数据量非常庞大,若是想进行模糊查询,查询姓 zhang
的用户信息,那么它的效率一定是很低的,因为它需要从第一条数据开始遍历到最后一条数据。来看看ElasticSearch是如何做的,它采用的是一种叫 倒排索引
的方式,即:在插入数据的时候就建立了一张关键字与id的对应表:
+---------+-------+
| keyword | id |
+----+------------+
| zhang | 1,2,3 |
| san | 1,2,3 |
| li | 4 |
| si | 4 |
+---------+-------+