此外,虽然我们一直说 ES 是一个搜索引擎,但其实 ES 不仅可以用来搜索,还可以用来做数据分析 。比如电商网站通过 ES 选取 "百褶裙" 销量最高的十个商家,新闻网站通过 ES 选取访问量最高的几篇文章等等,显然此时在获取数据的同时也伴随着数据分析 。因此 ES 是一个分布式的搜索和数据分析引擎,能够进行全文检索、结构化检索、数据分析,以及对海量数据进行接近实时的处理 。
当然相信很多人都听过 ELK,是用来搭建日志分析平台的 。其中 E 就是这里的 ElasticSearch , L 是 Logstash,K 是 Kibana 。
- Logstash 用来做数据采集;
- ElasticSearch 负责数据分析;
- Kibana 负责数据可视化;
- 可以组成大型分布式集群,处理 PB 级数据,服务大公司;也可以运行在单机或者组成小型分布式集群,服务小公司 。
- ES 不是什么新技术,主要是将全文检索、数据分析以及分布式这些现有的技术合并在了一起,才形成了独一无二的 ES 。
- 对用户而言是开箱即用的,非常简单,作为中小型的应用,直接三分钟部署一下 ES 就可以作为生产环境的系统来用了 。
- 数据库的功能面对很多领域是不够用的,一些特殊的功能,像全文检索、同义词处理、相关度排名,复杂数据分析 , 海量数据的近实时处理等等,这些数据库是不支持的,而 ES 作为一个补充提供了数据库不具备的功能 。
ElasticSearch 的核心概念
关于 ES,有几个专业术语,我们需要提前了解一下 。
Cluster:集群,包含多个节点,当然也可以只包含一个节点 。
Node:集群中的一个节点,每个节点都有一个名称(默认随机分配),节点的名称还是比较重要的,尤其是在执行运维管理操作的时候 。
Index:索引,对应 MySQL 的数据库 。
Type:类型,对应 MySQL 的表 。
Document:文档,对应 MySQL 表中的一条记录,ES 的一个 Document 就类似于一条 JSON 数据 。当然每条 JSON 数据可以有多个字段,然后字段在 ES 中被称为 Field,对应 MySQL 中的 Column 。
shard:单台机器无法存储大量数据 , ES 可以将一个索引中的数据切分为多个 shard,分布在多台服务器上存储 。有了 shard 就可以横向扩展 , 存储更多的数据,让搜索和操作分布到多台服务器上去执行,提升吞吐性能 。每个 shard 都是一个 Lucene Index,说白了就是 Index 的一个切片 。
【ElasticSearch 的概念解析与使用方式】replica:任何一个服务器都有可能因为故障而宕机,造成 shard 丢失,因此可以为每一个 shard 创建多个 replica 副本 。replica 可以在 shard 故障时提供备用服务,保证数据不丢失,此外多个 replica 还可以提升搜索操作的吞吐量和性能 。
默认情况下,每个 Index 会被切分成 5 个 shard(建立索引时设置,设置后不能修改) , 被称为 primary shard 。每个 primary shard 默认会有一个 replica shard(可以随时修改) 。简单说的话,每个 Index 默认会被分成 5 个 shard,每个 shard 会有一个 replica 。
当然啦,在 7.x 之前每个 Index 默认有 5 个 shard,但从 7.x 开始每个 Index 默认只有 1 个 shard 。因此在概念上,ES 和关系型数据库还是有一些共同之处的 。
文章插图
图片
需要注意的是,随着 ES 的发展,Type 的概念逐渐在弱化 , 因为全文索引的目的是建立关键词到 id 的映射 , 所以 Type 和全文索引的概念是冲突的 。在 ES 6.x 中 , 已经规定一个 Index 下只能包含一个 Type , 而到 ES 7.x 时 , Type 的概念就被完全移除了 。
安装 ElasticSearch
下面来安装 ES , 这里我使用的是云服务器,操作系统是 centos 7 。由于 ES 是基于 Java 语言编写的,所以理论上在安装 ES 之前要先安装 JDK,但 ES 从 8.x 开始已经自带 JDK 了,因此我们就不需要再单独安装了 。
然后去 ES 官网下载相应的安装包 , 这里我下载的是最新版 8.11.3,然后上传到服务器,并解压到 /opt 目录中 。当然,如果你的节点上安装了 Docker,那么也可以基于容器启动 。
推荐阅读
- 简易版的SpringBoot是如何实现的!!!
- 掌握Java并发编程,避免无处不在的竞态条件
- 什么是Python中的LEGB规则?
- 说一下MySQL主从复制的原理?
- 浅谈ArkUI之Web组件的基础用法
- 50 条实用的编写Python 程序建议
- 有什么好用的C/C++源代码混淆工具?
- 如何将加密的pdf解密?
- pdf怎么解密你知道吗?
- 今年的年休假没休完怎么办?