Skip to content

Latest commit

 

History

History
executable file
·
65 lines (34 loc) · 5.2 KB

Basic Concepts.md

File metadata and controls

executable file
·
65 lines (34 loc) · 5.2 KB

基本概念

Elasticsearch有一些核心概念。一开始就理解这些概念可以极大的帮助学习过程。

接近实时(NRT)

Elasticsearch是一个接近实时的搜索平台。这意味着从索引一个文档到可以搜索这个文档之间存在一个延迟(通常是1秒)。

集群

集群是一个或者更多的节点(服务器)的集合,这个集群一起保存所有的数据,提供跨节点的联合索引和搜索能力。集群通过唯一的名称来识别,默认是"elasticsearch"。这个名称很重要,因为如果节点设置为通过其名称加入集群,则节点只能是集群的一部分。

不要在不同的环境中重复使用相同的集群名称,否则你最终可能会加入错误的集群。比如你可以在开发、阶段、生产环境中使用logging-dev,logging-stage,logging-prod

注意,单个节点的集群是有效且完美的。此外,你还可以有多个独立的集群,每个集群都有自己唯一的集群名称。

节点

节点是集群中一台单独的服务器,它保存数据,参与集群的索引及搜索。和集群一样,节点也用名称来识别,名称默认是一个起始时赋予节点的随机UUID值。如果不想使用默认的名称,可以指定其他名称。这个名称对于节点的管理非常重要,你可以识别网络中服务器对应Elasticsearch集群中的哪一个节点。

节点可以通过集群名字来配置加入特定的集群。每个节点默认会加入名为elasticsearch的集群,这意味着当你启动一系列可以互相通信的节点时,这些节点可以自动组成并加入一个名为elasticsearch的集群。

集群中,你可以拥有任意数量的节点。甚至如果网络中只有一个节点,这个节点也会组成一个名为elasticsearch的单节点集群。

索引

索引是具有某些相似特征的文档的集合。比如,用户数据可以组成一个索引,产品目录可以组成一个索引,订单数据可以组成一个索引。索引通过名称(必须全小写)来识别,这个名称在对其中的文档进行索引、搜索、更新、删除操作时引用索引。

在集群中,你可以定义任意数量的索引。

类型

索引中可以定义一个或多个类型。类型是索引的逻辑分类/分区,语义完全由你定义。通常一组具有公共字段的文档定义成一个类型。假设你运行一个博客平台,并将数据保存在单个索引中。在这个索引中,你会为用户数据定义一个类型,为博客数据定义一个类型,为评论数据定义一个类型。

文档

文档是可以一个可以被索引的基本信息单元。比如,一个顾客是一个文档,一个产品是一个文档,一个订单是一个文档。文档以JSON的形式表示,JSON是随处可见的网络数据交换格式。

在索引/类型中,你可以存储任意数量的文档。尽管文档物理上存储在索引中,实际上文档必须索引/分配到索引中的类型上。

分片和副本

索引可以潜在地存储超过单个节点硬件限制的大量数据。比如,10亿个简单的索引占用1TB的磁盘空间,单个节点可能无法承载或者单个节点来提供多个搜索请求太慢。

为了解决这个问题,Elasticsearch将索引细分为多个分片。当你创建索引是,你可以简单地定义分片的数量。每个分片都是一个功能完整和独立的“索引”,可以托管在集群中任何节点上。

分片有两个非常重要的原因:

  • 它允许你水平分割/缩放内容卷
  • 它允许你跨分片(潜在是在多个节点上的)分布式并行操作,从而提高性能/吞吐量。

分片如何分布式操作以及文档如何聚合成搜索请求的结果完全由Elasticsearch控制,对用户是透明的。

在网络/云环境中,故障是随时可以预期的。故障转移机制是有用并且被强烈推荐的,防止分片/节点以某种方式脱机或由于某种原因消失。为此,Elasticsearch允许你将索引分片的一个或多个拷贝转换为分片副本或者简称副本。

副本有两个非常重要的原因

  • 它在分片/节点故障时提供高可用性。因此,注意不能将分片副本分配到和原始分片相同的节点中。
  • 允许扩展吞吐量,因为搜索可以在所有副本上并行执行。

总而言之,每个索引可以分成多个分片。索引也可以复制0次(没有副本)或多次。一旦被复制,每个索引就有了主分片(拷贝来源的原始分片)和分片副本(主分片的拷贝)。索引创建时每个索引都可以定义大量的分片和副本。索引创建之后,可以动态地修改副本数量,但是不可以修改分片的数量。

默认情况下,每个索引都被分配了5个主分片和1个副本,这意味着如果你集群中至少有两个节点,你的索引就会有5个主分片以及5个副本分片(1个完全副本),每个索引总共有10个分片。

每个Elasticsearch分片都是一个Lucene索引。一个Lucene索引可以包含的文档有一个最大值,上限是2,147,483,519(=Integer.MAX_VALUE-128)。你可以使用_cat/shards接口来监视分片的数量。