首页 > 代码库 > 添加一个index(add an index)

添加一个index(add an index)

想ES中存储数据,需要index——存储数据的地方,实际上,index就是一个指向若干物理shard的逻辑命名空间。

shard就是更底层的工作单元,每个shard是一个Lucene的实例,每个shard在其控制范围内都是一个完整的搜索引擎。我们的文档被存储,并且被index到shard,但是应用程序是不和shard直接对话的而是和index进行通信。

由于shard是真正储存数据的地方,因此shard表示了ES在你的cluster中是怎么分布数据的。文档被存储在shard中,shard被分配到cluster中的node中。当你的cluster扩展或这收缩,ES将会自动在node自动迁移shard,一次cluster可以自动实现平衡分布。

一个shard可以作为primary shard也可一作为replica shard。每个在你index中的document都仅仅分配到一个primary shard,因此primaryshard的数量决定了你的index能存储的最大数据量。

然而理论上primary shard能存储的数据量没有限制,这个显示是在实际运行中得到的。shard能存储的最大数据量完全取决你的使用场景如:硬件的限制,document的复杂度,插入(index)和查询(query)文档(document)的方式和你期望响应的速度。

replica shard就是primary shard的一份拷贝。replica就是primary shard的数据冗余用来保护数据免受到硬件故障的影响,并且对文档的搜索和检索请求作出相应。

primary shard的数量在一个index创建的时候已经被固定了,但是replica shard的数量在任何时候都是可以改变的。

现在,在一个仅仅包含一个node的空的cluster中创建一个名为“blogs”的index。默认情况下,一个index会被分配5个primary shard,但是作为例子,这里将会分配3个primary shard和1个replica(为每个primary shard分配一个replica shard)

{
   
"settings":{
     
"number_of_shards":3,
     
"number_of_replicas":1
   
}
}

 生成的blogs index将会如下图

A single-node cluster with an index有三个primary shard。检测cluster-health,将会得到如下响应,

{
   
"cluster_name":          "elasticsearch",
   
"status":                "yellow",
   
"timed_out":             false,
   
"number_of_nodes":       1,
   
"number_of_data_nodes":  1,
   
"active_primary_shards":3,
   
"active_shards":         3,
   
"relocating_shards":     0,
   
"initializing_shards":   0,
   
"unassigned_shards":     3
}

标记1处的status表示cluster为yellow

标记2处表示还有3个shard没有被分配

cluster的health状态是yellow意味着所有的primary shard都已经启动了并且正常运行了——这个cluster能提供所有的请求服务了——但是只有若干不是全部的replica shard被激活。事实上,未被分配的三个shard——他们还没有分配到node下。他们也不存储备份的数据。这时候如果丢失了数据,那就是真的丢失了。

 目前,这个cluster已经可以完全实现基础功能了,但是有硬件故障导致的数据丢失的风险。

 

原文:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_add_an_index.html