在正式学习 ElasticSearch 之前,首先看一下 ElasticSearch 中的基本概念。
这些概念将在以后的章节中出现多次,所以花15分钟理解一下是非常值得的。
英文好的同学,请直接移步官网:(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/_basic_concepts.html)
near realtime(nrt) :
ElasticSearch 是一款“接近实时(nrt)”的搜索平台,为什么说“接近实时”,因为 ElasticSearch 可以在为一个“文档(document)”建立“索引(index)”后,非常短的时间内(这个时间通常在1秒之内)提供搜索支持。
cluster:
“集群(cluster)”是由一个或多个“节点”组合,负责管理你的全部数据,并联合提供建立“索引(index)”和“搜索”服务。
每个“集群”都有一个唯一标识,默认为"elasticsearch"。这是一个非常重要的标识,因为一个“节点(node)”只可以属于一个“集群(cluster)”。
node :
“节点(node)”是“集群”中的一台单独搜索服务器。负责存储数据,参与"集群“中建立索引和搜索任务。
与“集群”类似,每个“节点(node)”都有一个唯一标识,默认是随机的人名(英文名字)。
通过配置 /config/elasticsearch.yml 文件中的 cluster.name 项,我们可以设置这个“节点(node)”属于哪一个“集群(cluster)”。
index:
“索引(index)”是“文档(document)”的集合。一个索引中的“文档(document)”应该相似的特征。
例如,你可以为“用户信息”创建一个“索引(index)”,为“某个产品类别”创建另一个“索引”,当然,也可以为“订单信息”创建一个“索引”......
一个“索引(index)”应当有一个唯一的“名字”(必须全部为小写字母),这个“名字”可用于建立索引,搜索、更新和删除索引中的“文档”。
在一个“节点(node)”中,你可以定义任意数量的“索引(index)”。
type:
“类型(type)”是“索引(index)”中完全由你定义的一个逻辑上的类别/部分。
每个“索引(index)”都可以包含一个或多个“类型(type)”。例如,你准备构建一个博客系统,并使用一个“索引”存储所有数据,在这个“索引”中,可以为“用户信息”定义一个“类型(type)”,为“博客数据”定义另一个“类型(type)”,为“评论数据”定义第三个“类型”......
document:
“文档(document)”是可被建索引的一个基本信息单元。通常采用JSON格式。
需要注意的是,每个文档必须被指定对应的“索引(index)”和“类型(type)”。
shards & replicas:
“分片(shards)”:一个“索引”有可能存储的数据量超过了硬盘的容量,为了解决这个问题,ElasticSearch 支持将一个“索引”细分为多个“分片(shards)”,将其分布到不同的“节点”上,构成分布式搜索。
“副本(replicas)”:“副本(replicas)”提供了高可用性,当某个节点/分片损坏时,可以从“副本”中恢复。“副本”提供了可伸缩性,在搜索量上升时,“副本”可实现并行查询。
每个“索引(index)”都可以被分割为多个“分片”,同样,每个“索引”可以有0或多个“副本”。
“分片”和“副本”的数量可以在每个“索引”创建时指定。但创建完成后,不可以再分配索引的”分片“。默认情况下(至少拥有两个”节点“),ElasticSearch 会分配5个”分片“,每个“分片”会产生1个”副本”。