es的基本词语
取自互联网
索引:
ES将它的数据存储在一个或者多个索引中。用sql领域的术语来类比,索引就像数据库,可以向索引写
入文档或者从索引中读取文档,并通过ES内部使用的Lucene将数据写入索引或从索引中检索数据。
索引是具有某些类似特征的文档集合,索引由名称标识(必须全部小写)。
文档:
文档是可以建立索引的基本信息单元。例如,您可以为单个客户提供文档,为单个产品提供一个文档,
为单个订单提供一个文档。该文档以JSON(JavaScript Object Notation)表示,JSON是一种普遍存在
的互联网数据交换格式。
在索引/类型中,您可以根据需要存储任意数量的文档。请注意,尽管文档实际上驻留在索引中,但实际
上必须将文档编入索引/分配给索引中的类型。
映射(mapping):
ES中的索引模式叫做Mapping。索引中的每个文档都有一个type,每个type拥有自己的模式或者模式
定义。
用户可以设置一些参数,来决定如何将输入文本分割为词条,哪些词条应该被过滤掉,或者哪些附加处
理时有必要被调用的。如排序时所需的字段内容信息,者就是mapping扮演的角色。
类型:
ES中每个文档都有与之对应的类型定义。这允许用户在一个索引中存储多种文档类型,并为不同文档
类型提供不同的映射。
节点:
单个的ES服务实例称为节点(node)。很多时候部署一个ES节点就足以应付大多数简单的应用,但是
考虑到容错性或在数据膨胀到单机无法应付这些状况时,你也许会更倾向于使用多节点的ES集群。
集群:
集群(cluster)是一组具有相同cluster.name的节点集合,他们协同工作,共享数据并提供故障转移和扩
展功能,当然一个节点也可以组成一个集群。
集群由唯一名称标识,默认情况下为“elasticsearch”。此名称很重要,因为如果节点设置为按名称加入
集群的话,则该节点只能是集群的一部分。
确保不同的环境中使用不同的集群名称,否则最终会导致节点加入错误的集群。
集群状态通过 绿,黄,红 来标识:
绿色 - 一切都很好(集群功能齐全)。
黄色 - 所有数据均可用,但尚未分配一些副本(集群功能齐全)。
红色 - 某些数据由于某种原因不可用(集群部分功能)。
注意:当群集为红色时,它将继续提供来自可用分片的搜索请求,但您可能需要尽快修复它,因为存
在未分配的分片。
分片:
索引可能存储大量可能超过单个节点的硬件限制的数据。例如,占用1TB磁盘空间的十亿个文档的单个
索引可能不适合单个节点的磁盘,或者可能太慢而无法单独从单个节点提供搜索请求。
为了解决这个问题,Elasticsearch 提供了将索引细分为多个称为分片的功能。创建索引时,只需定义
所需的分片数即可。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点
上。
设置分片的目的及原因主要是:
它允许您水平拆分/缩放内容量;
它允许您跨分片(可能在多个节点上)分布和并行化操作,从而提高性能/吞吐量;分片的分布方式以及如何将其文档聚合回搜索请求的机制完全由 Elasticsearch 管理,对用户而言
是透明的。
在可能随时发生故障的网络/云环境中,分片非常有用,建议使用故障转移机制,以防分片/节点以
某种方式脱机或因任何原因消失。为此,Elasticsearch 允许您将索引的分片的一个或多个副本制作
成所谓的副本分片或简称副本。
副本:
副本,是对分片的复制。目的是为了当分片/节点发生故障时提供高可用性,它允许您扩展搜索量/吞吐
量,因为可以在所有副本上并行执行搜索。
总而言之,每个索引可以拆分为多个分片。索引也可以复制为零次(表示没有副本)或更多次。复制之
后,每个索引将具有主分片(从原始分片复制而来的)和复制分片(主分片的副本)。
可以在创建索引时为每个索引定义分片和副本的数量。创建索引后,您也可以随时动态更改副本数,但
这不是一项轻松的任务,所以预先计划正确数量的分片是最佳方法。
默认情况下,Elasticsearch 中的每个索引都分配了5个主分片和1个副本,这意味着如果集群中至少有
两个节点,则索引将包含5个主分片和另外5个副本分片(1个完整副本),总计为每个索引10个分片。
网关:
在ES的工作过程中,关于集群状态,索引设置的各种信息都会被收集起来,并在网关(gateway)中被
持久化
小结:
es与MySQL的类比。
es对我来说就是一个非关系型数据库。
MySQL | elasticsearch |
---|---|
数据库 | 索引 |
表 | 类型(type) |
行 | 文档documents |
es 的数据结构
分片
就和redis的slot(槽点)的概念相似,一个es存储的文件也是分分片存储,不同的分片可以在不同的机器设备上,因为es默认是集群的,所以引入分片概念以后就会会产生数据冗余和高可用的该概念。
像这样,这个数据分成了5个分片,每个节点上有一部分分片的数据。他的高可用性表现在三个节点任意一个节点挂掉以后不会影响数据的完整性。这个一般是es自己实现。
从索引----->分片(类型)------>文档id
文档id里面就是我们要的数据。
倒排索引
一句话总结:就是通过歌词可以找到歌曲。
比如我们有ABC三篇文章,A是关于java基础的,B是关于ssm框架的,C是关于springboot和微服务的。
我们先总结一下三篇文章的特点:
- 都是和java语言有关系。
- BC都是框架相关知识。
对这三篇文件建立倒排索引如下
也就是通过文章的关键字当文章反过来,这时候我们如果要查询和java相关的,就指向了ABC三篇文章。
如果是想看和spring有关的,因为BC都是有spring的词语,如果用分词将springboot分成了三篇spring+boot则C文章也会被搜到。同理搜素springboot也是这个道理。不过C文章直接出现了springboot,所以C的耦合度会高一些。
而把ABC变成后面这个样子的过程,就被称为倒排索引。