环境
虚拟机: centos7
操作系统:win7
elasticsearch:5.4.3
kibana:5.4.3
基本概念
这些都是elasticsearch
核心的基本概念,从一开始就理解这些概念的话,将能极大的帮助缓解学习进程。
近实时(NRT)
elasticsearch是近实时搜索。这意味着从你索引(创建)一个文档到能够被索引会有一点延迟(通常是1秒)。
集群
集群是一个或多个节点(服务器)的集合,它们共同保存整个数据,并在所有节点上提供联合索引和搜索功能。集群由一个唯一名称进行标识,默认是elasticsearch
。
这个名称很重要,因为如果节点设置了通过名称来加入,那么这个节点只能作为集群的一部分。
确保在不同的环境中集群的名称都不相同,否则会导致节点加入到错误的节点。例如,你可以在开发、staging
和生产阶段分别使用logging-dev
、loging-stage
和logging-prod
。
注意:只有一个节点的集群是有效。此外,你也可以有多个独立的集群,它们都有自己的集群名。
节点
节点是作为集群一部分的单一服务器,存储数据,并参与集群的索引和搜索功能。
就像集群一样,节点通过一个名词来作为唯一标识。默认情况下是一个随机的通用唯一标识符(UUID),它在启动时分配给节点。如果你不想使用默认名称,你可以给所需的任何节点取名字。这个名称对于管理目的来说很重要,你希望确定您网络中哪些服务器对应于elasticsearch
集群中的哪些节点。
可以将节点配置为按指定名称加入集群。默认情况下,每个节点都设置为加入名为elasticsearch
的集群,这意味着如果您在网络上启动了多个节点,并且假设它们可以互相发现,那么它们将自动形成并加入名为elasticsearch
的单个集群。
在一个集群中,你有你所需的节点。此外,你的网络上没有其他elasticsearch
节点正在运行,那么启动单个节点默认将形成一个名为elasticsearch
的新单节点集群。
索引(Index)
索引是具有相近特征的文档集合。例如,你可以拥有客户数据索引,产品目录索引或者是订单数据索引。索引通过一个名称(必须是小写)来作为唯一标识,这个名称用于在对文档执行索引、搜索、和删除操作时引用索引。
在一个集群中,你可以定义你所需的索引。
注 索引相对于关系型数据库中的数据库
类型(Type)
在索引中,你可以定义一个或多个类型。类型是你索引上的逻辑类别/分区,其语义完全取决于你自己。通常情况下,为具有一组公共字段的文档定义一个类型。例如,假设你运行一个博客平台,并将你的数据全部存储在单一索引中。在这个索引中,你可能会定义用户数据为一个类型,博客为一个类型,评论为一个类型。
注 类型相对于关系型数据库中的表
文档 (Document)
文档是能够被索引的基础信息单元。例如,你可以有个消费者文档,一个产品文档,一个订单文档。这些文档是用json
标识的。
在Index/type
(数据库/表),你可以存在你所需的文档。
注意尽管文档物理上是存储在索引中,但是文档通常必须被索引
并分配到一个类型中。
分片 & 副本
索引可能存储超过单个节点硬件限制的大量数据。例如,占用1TB
磁盘空间的十亿份文档的单个索引,可能不太适合放在单个节点的磁盘上,或者单个节点提供的搜索服务可能太慢。
为了解决这个问题,elasticsearch
提供了将你的索引拆分为多个片段的能力。这些片段就叫分片。当你创建一个索引,你可以简单的定义你所需的分片数量。
每个分片本身就是一个功能完整且独立的“索引”,并且可以存储在集群中的任何节点上。
分片很重要的理由有两个:
①它允许你水平拆分和扩展。
②它允许跨分片(可能多个节点上)进行分布式和并行操作,从而提高性能/吞吐量。
分片分布式的机制,以及它的文档如何汇总到搜索请求中完全由elasticsearch
来管理,并且对于用户来说是透明的。
在可能随时发生故障的网络/云环境中,非常有用并强烈推荐使用故障转移机制,以防止分片/节点因为某种原因脱机或消失。为此,elasticsearch
允许你将索引分片中的一个或多个复制到所谓的副本分片或简写为副本中去。
复制很重要的两个理由:
①如果分片/节点出现故障,它将提供高可用性。为了达到这个目的,需要重点注意的是:副本分片永远不会复制到和原始分片相同的节点。
②它允许你扩展搜索量/吞吐量 因为搜索可以在所有的副本中并行执行。
总结一下,每个索引可以拆分成多个分片。索引可以被复制0(没有副本)或很多次。
一旦被复制,每个索引都将有个主分片(原始分片)和副本分片(从原始分片那里复制过来的)。在每个索引被创建的时候,可以定义分片和副本的数量。创建索引后,你可以随时动态改变副本数量,但是你不能更改分片的数量。
默认情况下,在elasticsearch
中的每个索引(数据库)默认有5个主分片和1个副本,其意味着,如果你的集群中至少有两个节点的话,那么你的索引将具有5个分片,另外5个副本分片(相当于1个完整副本),每个索引(数据库)10个分片。
译者说明:5个主分片 1个副本的关系是: 每个主分片都有一个副本;5个副本加起来,就相当于一个完整的副本。
注意每个elasticsearch
分片都是一个Lucene
索引。在单个Lucene
索引中有一个最大的文档数量限制。从Lucene-5843
起,限制为2,147,483,519 (= Integer.MAX_VALUE - 128)
文档。你可以使用_cat/shards
api监控分片大小。
译者说明:
索引:elasticsearch
中索引一词,要根据上下文来理解,
其可以表示:数据库、新增 和 倒排索引 。
索引 与 索引 与 索引
在elasticsearch
中索引是有多重意思的,这里总结下
名词——————– | 描述 |
---|---|
索引(名词) | 如前所述,一个 索引 类似于传统关系数据库中的一个 数据库 ,是一个存储关系型文档的地方。索引 (index) 的复数词为 indices 或 indexes 。 |
索引(动词) | 索引一个文档 就是存储一个文档到一个 索引 (名词)中以便它可以被检索和查询到。这非常类似于 SQL 语句中的 INSERT 关键词,除了文档已存在时新文档会替换旧文档情况之外。 |
倒排索引 | 关系型数据库通过增加一个 索引 比如一个 B树(B-tree)索引 到指定的列上,以便提升数据检索速度。Elasticsearch 和 Lucene 使用了一个叫做 倒排索引 的结构来达到相同的目的。 |
默认的,一个文档中的每一个属性都是 被索引 的(有一个倒排索引)和可搜索的。一个没有倒排索引的属性是不能被搜索到的。我们将在 倒排索引 讨论倒排索引的更多细节。
参考地址:
https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html#_document
版本2的中文版:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/_indexing_employee_documents.html