1.什么是Elasticsearch
ES是一个基于Restful web接口开源分布式搜索引擎,同时ES还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,能够横向扩展至数以百计的服务器存储以及处理PB级的数据
2.Elasticsearch的用途
1.日志分析
复杂的业务场景通常会产生繁杂多样的日志,如MySQL Log等,往往很难从繁杂的日志中获取价值,却要承担其存储的成本。Elasticsearch能够借助Beats、Logstash等快速对接各种常见的数据源,并通过集成的Kibana高效地完成日志的可视化分析,让日志产生价值。
2.搜索服务
商品搜索,APP 搜索,站内搜索,视频搜索等
3.数据分析
电商网站,最近7天手机这种商品销量排名前十的商家有哪些
新闻网站,最近一个月访问量排名前3的新闻板块是哪些
订单数据分析、用户画像等
4.后端存储
保存一些地图信息等,es里有个geo-point的类型,这个是存放地理坐标点的信息也就是经纬度的信息,然后通过点位查询距离范围内也就是一个圆内的所有数据
3.Elasticsearch的结构
集群(cluster)
一个Elasticsearch集群由一个或多个ES节点组成
节点(node)
一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。
索引(index)
一个索引是一个拥有一些相似特征的文档的集合(相当于关系型数据库中的一个数据库)
类型(type)
一个类型通常是一个索引的一个逻辑分类或分区,例如用户类型、博客类型等。ES7已经不支持在一个索引下创建多个类型,并且类型概念已经在后续版本中删除,这个主要是防止与Mysql的type混淆
文档(document)
一个文档是可以被索引的基本信息单元(相当于关系型数据库中的一行数据)
字段(field)
组成文档的最小单位。相当于关系型数据库中的一列数据。
映射(mapping)
用来定义一个文档以及其所包含的字段如何被存储和索引,例如在mapping中定义字段的名称和类型,以及所使用的分词器。
4.Elasticsearch为什么检索很快
主要原因是对检索的字段维护了一个倒排索引
DocId | Doc |
---|---|
1 | 全文搜索引擎Elasticsearch |
2 | 分布式全文搜索引擎Elasticsearch |
3 | 分布式文档数据库Elasticsearch |
4 | 高性能数据库Elasticsearch |
将文档进行分词维护成倒排索引
WordId | Word | DocIds |
---|---|---|
1 | 全文 | 1, 2 |
2 | 搜索 | 1, 2 |
3 | 引擎 | 1, 2 |
4 | Elasticsearch | 1, 2, 3, 4 |
5 | 分布式 | 2, 3 |
6 | 文档 | 3 |
7 | 数据库 | 3, 4 |
8 | 高性能 | 4 |
分词之后将word按照字典顺序排序,这样就能够以二分查找的方式找到目标值,时间复杂度为logN(访问磁盘次数),但是这实际上和MySQL的B+树的查询时间复杂度是一样的