前言
从这一章节开始,袁老师正式带领同学们来学习Elasticsearch的相关语法。首先我们对索引库的相关概念会进行探索,然后介绍如何使用Kibana对索引库进行操作。
一. 基本概念
1.节点(node)
一个节点是一个Elasticsearch的实例。
在服务器上启动Elasticsearch之后,就拥有了一个节点。如果在另一台服务器上启动Elasticsearch,这就是另一个节点。甚至可以通过启动多个Elasticsearch进程,在同一台服务器上拥有多个节点。
2.集群(cluster)
多个协同工作的Elasticsearch节点的集合被称为集群。
在多节点的集群上,同样的数据可以在多台服务器上传播,这有助于性能,这同样有助于稳定性,如果每个分片至少有一个副本分片,那么任何一个节点宕机后,Elasticsearch依然可以进行服务,返回所有数据。
但是它也有缺点:必须确定节点之间能够足够快速地通信,并且不会产生脑裂效应(集群的2个部分不能彼此交流,都认为对方宕机了)。
3.分片(shard)
索引可能会存储大量数据,这些数据可能超过单个节点的硬件限制。例如,十亿个文档的单个索引占用了1TB的磁盘空间,可能不适合单个节点的磁盘,或者可能太慢而无法单独满足来自单个节点的搜索请求。
为了解决此问题,Elasticsearch提供了将索引细分为多个碎片的功能。创建索引时,只需定义所需的分片数量即可。每个分片本身就是一个功能齐全且独立的“索引”,可以托管在群集中的任何节点上。
分片很重要,主要有两个原因:
- 它允许您水平分割/缩放内容量。
- 它允许您跨碎片(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量。
分片如何分布以及其文档如何聚合回到搜索请求中的机制完全由Elasticsearch管理,并且对您作为用户是透明的。
在随时可能发生故障的网络/云环境中非常有用,强烈建议您使用故障转移机制,以防碎片/节点因某种原因脱机或消失。为此,Elasticsearch允许您将索引分片的一个或多个副本制作为所谓的副本分片(简称副本)。
4.副本(replica)
分片处理允许用户推送超过单机容量的数据至Elasticsearch集群。副本则解决了访问压力过大时单机无法处理所有请求的问题。
分片可以是主分片,也可以是副本分片,其中副本分片是主分片的完整副本。副本分片用于搜索,或者是在原有的主分片丢失后成为新的主分片。
注意:可以在任何时候改变每个分片的副本分片的数量,因为副本分片总是可以被创建和移除的。这并不适用于索引划分为主分片的数量,在创建索引之前,必须决定主分片的数量。过少的分片将限制可扩展性,但是过多的分片会影响性能。默认设置的5份是一个不错的开始。
5.文档(document)
Elasticsearch是面向文档的,这意味着索引和搜索数据的最小单位是文档。在Elasticsearch中文档有几个重要的属性。
- 它是自我包含的。一篇文档同时包含字段和它们的取值。
- 它可以是层次的。文档中还包含新的文档,字段还可以包含其他字段和取值。例如,“location”字段可以同时包含“city”和“street“两个字段。
- 它拥有灵活的结构。文档不依赖于预先定义的模式。并非所有的文档都需要拥有相同的字段,它们不受限于同一个模式。
6.类型(type)
类型是文档的逻辑容器,类似于表格是行的容器。在不同的类型中,最好放入不同结构的文档。例如,可以用一个类型定义聚会时的分组,而另一个类型定义人们参加的活动。
7.索引(index)
索引是映射类型的容器。一个Elasticsearch索引是独立的大量的文档集合。每个索引存储在磁盘上的同组文件中,索引存储了所有映射类型的字段,还有一些设置。
8.映射(mapping)
所有文档在写入索引前都将被分析,用户可以设置一些参数,决定如何将输入文本分割为词条,哪些词条应该被过滤掉,或哪些附加处理有必要被调用(比如移除HTML标签)。这就是映射扮演的角色,存储分析链所需的所有信息。
Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。对比关系:
索引库(Indices) => 数据库(Database)
类型(Type) => 数据表(Table)
文档(Document) => 行(Row)
域字段(Field) => 列(Columns)
映射配置(Mappings) => 每个列的约束(类型、长度)
详细说明:
概念 | 说明 |
类型(Type) | 类型是模拟MySQL中的Table概念,一个索引库下可以有不同类型的索引(目前6.X以后的版本只能有一个类型),类似数据库中的表概念。数据库表中有表结构,也就是表中每个字段的约束信息;索引库的类型中对应表结构的叫做映射(Mapping),用来定义每个字段的约束 |
文档(Document) | 存入索引库原始的数据。比如每一条商品信息,就是一个文档 |
字段(Field) | 文档中的属性 |
映射配置(Mappings) | 字段的数据类型、属性、是否索引、是否存储等特性 |
二. 索引基本操作
1.创建索引库
1.1 创建索引库语法
Elasticsearch采用RESTful风格API,因此其API就是一次HTTP请求,你可以用任何工具发起HTTP请求。
创建索引的请求格式:
- 请求方式: PUT
- 请求路径: /索引库名
- 请求参数: JSON格式
语法结构见下:
{
"settings": {
"属性名": "属性值"
}
}
settings:就是索引库设置,其中可以定义索引库的各种属性,目前我们可以不设置,都走默认。
1.2 使用Kibana创建索引库
Kibana的控制台,可以对HTTP请求进行简化。相当于是省去了Elasticsearch的服务器地址。而且还有语法提示,非常便捷和舒服。
语法格式:
PUT /索引库名
1.使用Kibana创建yx索引库。
PUT /yx
2.在Kibana的Console窗口点击绿色按钮发送请求,响应结果见下。
{
"acknowledged": true,
"shards_acknowledged": true,
"index": "yx"
}
2.查看索引库
GET请求可以帮我们查看索引信息,语法格式:
GET /索引库名
1.使用Kibana查询yx索引库。
GET /yx
2.响应结果见下。
{
"yx": {
"aliases": {},
"mappings": {},
"settings": {
"index": {
"creation_date": "1670332544067",
"number_of_shards": "5",
"number_of_replicas": "1",
"uuid": "RQ2CUAEGR4uofhmgJIsNKg",
"version": {
"created": "6020499"
},
"provided_name": "yx"
}
}
}
}
3.删除索引库
删除索引使用DELETE请求。语法格式:
DELETE /索引库名
1.使用Kibana删除yx索引库。
DELETE /yx
2.响应结果见下。
{
"acknowledged": true
}
三. 结语
本章节袁老师主要给同学们介绍了节点、集群、分片、副本、文档、类型、索引和映射等核心的概念。然后我们介绍了如何使用Kibana操作索引库,包括对索引库的创建、查看和删除。需要同学们能够熟练掌握索引库操作的基本语法。
今天的内容就分享到这里吧。关注「袁庭新」,干货天天都不断!