一、ElasticSearch与DataBase对比理解
ElasticSearch => DataBase
index -> database
type -> table
document -> column
二、概念讲解
1、索引(index)
ES将数据存储在一个或多个索引中,且索引的名称必须为全小写字符,并通过索引名对文档进行curd操作。一个ES集群中可以按需创建任意数目的索引。
类比数据库,在我们的一个测试数据库内存在mds数据库和媒体saas数据库以及其他应用创建的数据库。
2、类型(type)
类型是索引内部的逻辑分区,一个索引内部可创建一个或多个类型(type)。
例如我们在用的日志服务器,就存在日志(log)类型和设备(device)类型。
类比数据库中的表,在我们的mds数据库内存在用户信息表和文章基本信息表以及其他多个表。
3、文档(document)
文档是Lucene索引和搜索的原子单位,它是包含了一个或多个域的容器,基于json格式进行表示。
类比数据库表中的每一列数据。
4、映射(mapping)
ES中,所有文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token,哪些token应该被过滤掉,以及哪些文本需要进行额外处理等等。
例如我们接下来要讲到的分词和拼音检索就是自定义的映射,在我们保存数据(文档)前会将保存的数据按我们安装的分词插件和拼音插件进行语义分析等,最后建立一个分析后的倒排索引留待下次检索查询。
一个ES服务器可包含多个索引(index),一个索引(index)可包含多个类型(type),一个类型可包含多个文档(document),一个文档(document)有可能会存在多种映射。
5、集群(cluster)
ES集群是一个或多个节点的集合,它们共同存储了整个数据集,并提供了联合索引以及可跨所有节点的搜索能力。
多节点组成的集群拥有冗余能力,它可以在一个或几个节点出现故障时保证服务的整体可用性。
集群靠其独有的名称进行标识,默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群,一个节点只能属于一个集群。
6、节点(node)
运行单个实例的ES主机称为节点,它是集群的一个成员,可以存储数据,参与集群索引及搜索操作。
类似于集群,节点靠其名称进行标识,默认为启动时自动生成的随机字符串。
节点通过为其配置的ES集群名称确定其所要加入的集群。
7、分片(shard)和副本(replica)
ES的“分片(shard)”机制可将一个索引内部的数据分布的存储于多个节点,它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能,这每一个物理的Lucene索引称为一个分片(shard)。
每个分片的内部都是一个全功能且独立的索引,因此可由集群中的任何主机存储。创建索引时,用户可指定其分片的数量,默认数量为5个。
shard有两种类型:primary和replica,即主shard和副本shard。
主shard用于文档存储,每个新的索引会自动创建5个主shard,当然次数量可在索引创建之前自行定义,不过,一旦创建完成,其主shard的数量就不可在做更改。
replica shard是primary shard的副本,用于冗余数据及其提高搜索性能。
每个主shard默认配置了一个副shard,但也可以配置多个,且其数量可动态更改。es会根据需要主动增加或减少这些副shard的数量。
es集群可由多个节点组成,各shard分布式的存储于这些节点上。
es可自动在节点间按需移动shard,例如增加节点或节点故障时。简而言之,分片实现了集群的分布式存储,而副本实现了其分布式处理及冗余功能。